簡體   English   中英

如何HTML編碼/轉義字符串?有內置的嗎?

[英]How to HTML encode/escape a string? Is there a built-in?

我有一個不受信任的字符串,我想在HTML頁面中顯示為文本。 我需要將字符' < '和' & '作為HTML實體轉義。 越少越好。

我正在使用UTF8,並且不需要其他實體用於重音字母。

Ruby或Rails中是否有內置函數,或者我應該自己編寫?

簽出Ruby CGI類。 有一些方法可以編碼和解碼HTML以及URL。

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

h輔助方法:

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

在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()是rails中html_escape()

在你的控制器中:

@stuff = "<b>Hello World!</b>"

在你看來:

<%=h @stuff %>

如果您查看HTML源:您將看到輸出而不實際加粗數據。 即它被編碼為&lt;b&gt;Hello World!&lt;/b&gt;

它將顯示為<b>Hello World!</b>

比較不同的方法:

> 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生成鏈接。 該文本可能包括單引號。 如果我沒有在confirm方法中轉義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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM