どのように文字列をエスケープ/エンコードをHTMLに?ビルトインはありますか?

StackOverflow https://stackoverflow.com/questions/692921

質問

私は、HTMLページ内のテキストとして表示する信頼されていない文字列を持っています。私は、HTMLのエンティティとして文字「<」と「&」をエスケープする必要があります。あまり大騒ぎより良います。

私はUTF8を使用していますし、アクセント付き文字のための他のエンティティを必要としません。

RubyやRailsの組み込み関数はありますか、私は自分自身をロールバックする必要がありますか?

役に立ちましたか?

解決

hヘルパーメソッド:

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

他のヒント

ルビー CGI のクラスをチェックアウト。 HTMLと同様にURLをエンコードおよびデコードするための方法があります。

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

Rubyでは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