2009-12-16 69 views
1

我使用Rails中h輔助方法來編碼/逃脫了撇號(')在我看來,我使用它像這樣Rails的HTML編碼

<%=h "Mike's computer" %> 

我的理解一個字符串就是HTML時查看源代碼應該是麥克%-27計算機,但生成的HTML中有一個撇號,小李的電腦

我失去了一些東西明顯?

我該如何得到我想要的結果Mike%27s電腦

幫助總是讚賞。

回答

5

撇號是HTML中的有效字符。它不被編碼,因爲它不需要編碼。

+0

@Darin季米特洛夫,感謝您的回覆。那麼在這種情況下,gsub(「'」,「%27」)是唯一的方法嗎?還是有另一種方式? – 2009-12-16 09:29:21

+0

你在找什麼是URL編碼,而不是HTML編碼 - 谷歌讓我知道這個:CGI :: escape(「Mike's Computer」) – 2009-12-16 09:42:54

+0

Darin告訴你,不需要進一步的操作。 – 2009-12-16 09:43:17

1

如果我們看一下h方法的源代碼(它是html_escape的別名),那麼打開文件並將單引號(')添加到文件中的HTML_ESCAPE常量並不難。

下面是方法的源代碼以及文件中方法的位置。找到常數和引用。你甚至可以在你想要的內部添加更多的東西。

HTML_ESCAPE = { '&' => '&amp;', '>' => '&gt;', '<' => '&lt;', '"' => '&quot;' } 

File actionpack/lib/action_view/template_handlers/erb.rb, line 17 
17:  def html_escape(s) 
18:  s.to_s.gsub(/[&"><]/) { |special| HTML_ESCAPE[special] } 
19:  end 

CAVEAT:此修改將影響所有使用該庫的項目。

或替代的方法是創建一個視圖助手方法說,在ApplicationHelper

def h_with_quote(s) 
    HTML_ESCAPE = { "'" => "%27"} 
    h(s).gsub(/[']/) {|special| HTML_ESCAPE[special]} 
end 

這種方法應該是安全的。

+1

你爲什麼要猴子補丁Rails做一些不需要的東西? – 2009-12-16 10:28:22

+1

這就是爲什麼我提出一個警告和另一個不是猴子補丁的答案。 我認爲開源的優勢在於您可以修改源代碼來解決問題。對於這種情況,由於可以使用替代方案,因此您有一點意思。感謝您指出了這一點。 – 2009-12-16 12:21:36

5

如果你想編碼網址,使用u幫手:

>> [email protected]:~/$ script/console 
Loading development environment (Rails 2.3.8) 
>> include ERB::Util 
=> Object 
>> h "Mike's computer" 
=> "Mike's computer" 
>> u "Mike's computer" 
=> "Mike%27s%20computer" 
>>