Bruce 的玩具間

my works and notes on ruby, rails, git, ubuntu linux, mac os x, etc...

幫rails 3 加個nl2br函數,把\n換成br tag

| Comments

Rails其實有內建轉換行的method叫simple_format,但是他會把連續兩個以上換行換成

...

,這有點太聰明了,又不知道有沒有其他更好的做法,所以我只好自己寫。

simple_format還可以擋javascript

在application_helper.rb

    def nl2br(html)  
     raw(h(html).gsub(/[(\n)(\r)]/, "\n" => "<br/>", "\r" => "" ))  
    end  
    先將內容擋掉不該有的html tag,再把\n替換成<br>,這樣子可以避免被塞入有危險性的tag,但又能放行自己的換行tag。  

h

<%=h "
" %>

# 其實是 h("
")

# => <br/>

raw

<%=raw "
" %>

# 其實是 raw("
")

# =>


.html_safe

<%= "
".html_safe %>

# 跟 raw("
") 是一樣的

# =>

在Rails 2,預設是raw,在Rails 3剛好相反,預設是harm

也就是說:

Rails 3:

<%= "
" %> 擋掉html

<%=raw "
" %> 直接出html

    Rails 2:  
    <%=h "<br/>" %> 擋掉html  
    <%= "<br/>" %> 直接出html  

在Rails 3加h也是沒關係的

Comments

comments powered by Disqus