如何HTML编码/逃避字符串?是否有一个内置的?
-
22-08-2019 - |
题
我有我想要显示为在HTML页面中的文本不受信任的字符串。我需要逃脱字符“<
”和“&
”作为HTML实体。忙乱越少越好。
我使用的是UTF8,不需要对重音的字母其他实体。
有没有在Ruby或者Rails的内置功能,或者我应该推出自己的?
解决方案
在h
辅助方法:
<%=h "<p> will be preserved" %>
其他提示
签出红宝石 CGI 类。有一些方法进行编码和解码HTML以及网址。
CGI::escapeHTML('Usage: foo "bar" <baz>')
# => "Usage: foo "bar" <baz>"
在Ruby on Rails的3 HTML将被默认转义。
有关非转义字符串使用:
<%= raw "<p>hello world!</p>" %>
ERB :: Util.html_escape 可以是任何地方使用。它可用而不Rails中使用require
。
这是除了克里斯托弗·布拉德福德的答案,使用HTML逃逸的任何地方,
因为大多数人都没有使用时下CGI
,你也可以使用Rack
:
require 'rack/utils'
Rack::Utils.escape_html('Usage: foo "bar" <baz>')
您可以使用h()
或html_escape()
,但大多数人按照约定使用h()
。 h()
是短于轨道html_escape()
。
在控制器:
@stuff = "<b>Hello World!</b>"
在您的视图:
<%=h @stuff %>
如果您查看HTML源:你将看到的输出,而无需实际加粗的数据。即它被编码为<b>Hello World!</b>
。
它会出现一个被显示为<b>Hello World!</b>
的不同的方法Comparaison:
> CGI::escapeHTML("quote ' double quotes \"")
=> "quote ' double quotes ""
> Rack::Utils.escape_html("quote ' double quotes \"")
=> "quote ' double quotes ""
> ERB::Util.html_escape("quote ' double quotes \"")
=> "quote ' double quotes ""
我写我自己是使用Rails ActiveMailer逃逸兼容:
def escape_html(str)
CGI.escapeHTML(str).gsub("'", "'")
end
h()
也是逸出引号有用。
例如,我有一个生成使用文本字段result[r].thtitle
的链接的图。文本可能包括单引号。如果我没有在确认方法逃避result[r].thtitle
之外,JavaScript将打破:
<%= link_to_remote "#{result[r].thtitle}", :url=>{ :controller=>:resource,
:action =>:delete_resourced,
:id => result[r].id,
:th => thread,
:html =>{:title=> "<= Remove"},
:confirm => h("#{result[r].thtitle} will be removed"),
:method => :delete %>
<a href="#" onclick="if (confirm('docs: add column &apos;dummy&apos; will be removed')) { new Ajax.Request('/resource/delete_resourced/837?owner=386&th=511', {asynchronous:true, evalScripts:true, method:'delete', parameters:'authenticity_token=' + encodeURIComponent('ou812')}); }; return false;" title="<= Remove">docs: add column 'dummy'</a>
注意:该标题:html
声明奇迹般地Rails的转义
不隶属于 StackOverflow