5

Rails 3.0.6 を使用して、私が

content_for :food_name, "Macaroni & Cheese"

その後、 を使用して元に戻すcontent_for(:food_name)と、 は既に&作成されます。&を実行しても問題ありませんcontent_for(:food_name).html_safe&はまだ作成&済みです。

ただし、次の方法で実行すると、エスケープされません。

content_for :food_name, "Macaroni & Cheese".html_safe

この場合、 は自動的&に に変わりません。&amp;さて、私が実際に a#{h content_for(:food_name)}を実行して 2 回エスケープされる ( になる&amp;amp;) 場所があるため、または説明に値があるため、いくつかの値を呼び出して他の値を呼び出さないのは<meta>奇妙になりhます。

また、1 つの大きな問題は、それが自動的にエスケープされ、その末尾に追加し、それをエスケープするために Rails 3 に依存するとどうなるかということ" - come see us!"&です。

content_forドキュメントで:

http://api.rubyonrails.org/classes/ActionView/Helpers/CaptureHelper.html#method-i-content_for

みたいな記述は見当たりません。では、上記の説明は正しいのでしょうか、それともドキュメントの方が正しいのでしょうか? 実際、自動 HTML エスケープはありません。

上記の Web ページのソース コードから、 をcontent_for呼び出しcapture、 を実行するように見えるERB::Util.html_escapeので、実際には自動エスケープがありますが、実際には存在するはずであり、その理由は何ですか? capture 自動エスケープを行うことも文書化されていませんか?

4

1 に答える 1

3

<%= raw some_stuff %>Rails にこれらの文字をエスケープさせたくない場合に使用し、それ以外の場合は単純な呼び出しを使用します 。

コンテンツがそのような可能性があり、エスケープされた場合に変更される可能性がある領域を常に知っているため、rawそれらの場所に簡単に収まります。

詳細については、Yehuda katz によるこの非常に優れた記事を参照してください。
safebuffers-and-rails-3-0

于 2011-04-27T23:14:18.737 に答える