我有我想要显示为在HTML页面中的文本不受信任的字符串。我需要逃脱字符“<”和“&”作为HTML实体。忙乱越少越好。

我使用的是UTF8,不需要对重音的字母其他实体。

有没有在Ruby或者Rails的内置功能,或者我应该推出自己的?

有帮助吗?

解决方案

h辅助方法:

<%=h "<p> will be preserved" %>

其他提示

签出红宝石 CGI 类。有一些方法进行编码和解码HTML以及网址。

CGI::escapeHTML('Usage: foo "bar" <baz>')
# => "Usage: foo &quot;bar&quot; &lt;baz&gt;"

在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源:你将看到的输出,而无需实际加粗的数据。即它被编码为&lt;b&gt;Hello World!&lt;/b&gt;

它会出现一个被显示为<b>Hello World!</b>

的不同的方法Comparaison:

> CGI::escapeHTML("quote ' double quotes \"")
=> "quote &#39; double quotes &quot;"

> Rack::Utils.escape_html("quote ' double quotes \"")
=> "quote &#x27; double quotes &quot;"

> ERB::Util.html_escape("quote ' double quotes \"")
=> "quote &#39; double quotes &quot;"

我写我自己是使用Rails ActiveMailer逃逸兼容:

def escape_html(str)
  CGI.escapeHTML(str).gsub("&#39;", "'")
end

h()也是逸出引号有用。

例如,我有一个生成使用文本字段result[r].thtitle的链接的图。文本可能包括单引号。如果我没有在确认方法逃避result[r].thtitle之外,JavaScript将打破:

&lt;%= 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 %>

&lt;a href="#" onclick="if (confirm('docs: add column &amp;apos;dummy&amp;apos; will be removed')) { new Ajax.Request('/resource/delete_resourced/837?owner=386&amp;th=511', {asynchronous:true, evalScripts:true, method:'delete', parameters:'authenticity_token=' + encodeURIComponent('ou812')}); }; return false;" title="&lt;= Remove">docs: add column 'dummy'</a>

注意:该标题:html声明奇迹般地Rails的转义

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top