HTML ページにテキストとして表示したい信頼できない文字列があります。<
文字 ' ' と ' &
' を HTML エンティティとしてエスケープする必要があります。大騒ぎが少ないほど良いです。
私は UTF8 を使用しており、アクセント付きの文字に他のエンティティは必要ありません。
Ruby または Rails に組み込み関数はありますか、それとも自分で作成する必要がありますか?
HTML ページにテキストとして表示したい信頼できない文字列があります。<
文字 ' ' と ' &
' を HTML エンティティとしてエスケープする必要があります。大騒ぎが少ないほど良いです。
私は UTF8 を使用しており、アクセント付きの文字に他のエンティティは必要ありません。
Ruby または Rails に組み込み関数はありますか、それとも自分で作成する必要がありますか?
Ruby CGIクラスをチェックアウトします。URL だけでなく、HTML をエンコードおよびデコードする方法もあります。
CGI::escapeHTML('Usage: foo "bar" <baz>')
# => "Usage: foo "bar" <baz>"
h
ヘルパー メソッド:
<%=h "<p> will be preserved" %>
Ruby on Rails 3 では、HTML はデフォルトでエスケープされます。
エスケープされていない文字列の場合:
<%= raw "<p>hello world!</p>" %>
ERB::Util.html_escapeはどこでも使用できます。require
Railsでは使わなくても利用可能です。
HTMLエスケープをどこでも使用するというクリストファー・ブラッドフォードの回答への追加。CGI
最近ではほとんどの人が使用していないため、以下も使用できますRack
。
require 'rack/utils'
Rack::Utils.escape_html('Usage: foo "bar" <baz>')
h()
またはを使用できますhtml_escape()
が、ほとんどの人はh()
慣例により使用します。 h()
inrailsの略ですhtml_escape()
。
コントローラ内:
@stuff = "<b>Hello World!</b>"
あなたの見解では:
<%=h @stuff %>
HTMLソースを表示する場合:実際にデータを太字にすることなく出力が表示されます。つまり、としてエンコードされ<b>Hello World!</b>
ます。
次のように表示されます<b>Hello World!</b>
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 によって魔法のようにエスケープされます。