幫rails 3 加個nl2br函數,把\n換成br tag
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也是沒關係的