104

HTML ページにテキストとして表示したい信頼できない文字列があります。<文字 ' ' と ' &' を HTML エンティティとしてエスケープする必要があります。大騒ぎが少ないほど良いです。

私は UTF8 を使用しており、アクセント付きの文字に他のエンティティは必要ありません。

Ruby または Rails に組み込み関数はありますか、それとも自分で作成する必要がありますか?

4

8 に答える 8

147

Ruby CGIクラスをチェックアウトします。URL だけでなく、HTML をエンコードおよびデコードする方法もあります。

CGI::escapeHTML('Usage: foo "bar" <baz>')
# => "Usage: foo &quot;bar&quot; &lt;baz&gt;"
于 2010-09-30T13:52:33.240 に答える
98

hヘルパー メソッド:

<%=h "<p> will be preserved" %>
于 2009-03-28T15:14:54.067 に答える
78

Ruby on Rails 3 では、HTML はデフォルトでエスケープされます。

エスケープされていない文字列の場合:

<%= raw "<p>hello world!</p>" %>
于 2011-06-08T07:43:53.400 に答える
27

ERB::Util.html_escapeはどこでも使用できます。requireRailsでは使わなくても利用可能です。

于 2013-02-09T11:15:59.717 に答える
18

HTMLエスケープをどこでも使用するというクリストファー・ブラッドフォードの回答への追加。CGI最近ではほとんどの人が使用していないため、以下も使用できますRack

require 'rack/utils'
Rack::Utils.escape_html('Usage: foo "bar" <baz>')
于 2013-01-28T20:00:55.200 に答える
16

h()またはを使用できますhtml_escape()が、ほとんどの人はh()慣例により使用します。 h()inrailsの略ですhtml_escape()

コントローラ内:

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

あなたの見解では:

<%=h @stuff %>

HTMLソースを表示する場合:実際にデータを太字にすることなく出力が表示されます。つまり、としてエンコードされ&lt;b&gt;Hello World!&lt;/b&gt;ます。

次のように表示されます<b>Hello World!</b>

于 2009-03-29T19:59:47.507 に答える
0

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 によって魔法のようにエスケープされます。

于 2011-11-06T22:11:52.020 に答える