どのように文字列をエスケープ/エンコードをHTMLに?ビルトインはありますか?
-
22-08-2019 - |
質問
私は、HTMLページ内のテキストとして表示する信頼されていない文字列を持っています。私は、HTMLのエンティティとして文字「<
」と「&
」をエスケープする必要があります。あまり大騒ぎより良います。
私はUTF8を使用していますし、アクセント付き文字のための他のエンティティを必要としません。
RubyやRailsの組み込み関数はありますか、私は自分自身をロールバックする必要がありますか?
解決
h
ヘルパーメソッド:
<%=h "<p> will be preserved" %>
他のヒント
ルビー CGI のクラスをチェックアウト。 HTMLと同様にURLをエンコードおよびデコードするための方法があります。
CGI::escapeHTML('Usage: foo "bar" <baz>')
# => "Usage: foo "bar" <baz>"
RubyではRailsの3にHTMLがデフォルトでエスケープされます。
非エスケープ文字列の場合は、使用します:
<%= raw "<p>hello world!</p>" %>
ERB :: Util.html_escape にすることができどこでも使用。これは、Railsのでrequire
を使用せずに使用可能です。
に加え、
ほとんどの人が、今日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でエスケープされ、