我使用Rails中h
輔助方法來編碼/逃脫了撇號(')在我看來,我使用它像這樣Rails的HTML編碼
<%=h "Mike's computer" %>
我的理解一個字符串就是HTML時查看源代碼應該是麥克%-27計算機,但生成的HTML中有一個撇號,小李的電腦
我失去了一些東西明顯?
我該如何得到我想要的結果Mike%27s電腦?
幫助總是讚賞。
我使用Rails中h
輔助方法來編碼/逃脫了撇號(')在我看來,我使用它像這樣Rails的HTML編碼
<%=h "Mike's computer" %>
我的理解一個字符串就是HTML時查看源代碼應該是麥克%-27計算機,但生成的HTML中有一個撇號,小李的電腦
我失去了一些東西明顯?
我該如何得到我想要的結果Mike%27s電腦?
幫助總是讚賞。
撇號是HTML中的有效字符。它不被編碼,因爲它不需要編碼。
如果我們看一下h方法的源代碼(它是html_escape的別名),那麼打開文件並將單引號(')添加到文件中的HTML_ESCAPE常量並不難。
下面是方法的源代碼以及文件中方法的位置。找到常數和引用。你甚至可以在你想要的內部添加更多的東西。
HTML_ESCAPE = { '&' => '&', '>' => '>', '<' => '<', '"' => '"' }
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
這種方法應該是安全的。
你爲什麼要猴子補丁Rails做一些不需要的東西? – 2009-12-16 10:28:22
這就是爲什麼我提出一個警告和另一個不是猴子補丁的答案。 我認爲開源的優勢在於您可以修改源代碼來解決問題。對於這種情況,由於可以使用替代方案,因此您有一點意思。感謝您指出了這一點。 – 2009-12-16 12:21:36
如果你想編碼網址,使用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"
>>
@Darin季米特洛夫,感謝您的回覆。那麼在這種情況下,gsub(「'」,「%27」)是唯一的方法嗎?還是有另一種方式? – 2009-12-16 09:29:21
你在找什麼是URL編碼,而不是HTML編碼 - 谷歌讓我知道這個:CGI :: escape(「Mike's Computer」) – 2009-12-16 09:42:54
Darin告訴你,不需要進一步的操作。 – 2009-12-16 09:43:17