回答:
Rails 3:
html_safe
実際には、HTMLセーフとして「文字列を設定」します(それよりも少し複雑ですが、基本的にはそれです)。このようにして、ヘルパーやモデルからHTML Safe文字列を自由に返すことができます。
h
ヘルパーからのものであるため、コントローラーまたはビュー内からのみ使用できます。出力を強制的にエスケープします。これは実際には非推奨ではありませんが、おそらくもう使用しないでしょう。唯一の使用法は、html_safe
宣言を「元に戻す」ことです。
式を前に付加することraw
は、実際にはその上でto_s
チェーンされた呼び出しと同等html_safe
ですが、と同様h
にヘルパーで宣言されるため、コントローラーとビューでのみ使用できます。
「SafeBuffers and Rails 3.0」は、SafeBuffer
s(html_safe
マジックを実行するクラス)がどのように機能するかを説明しています。
h
廃止されるとは言いません。使用"Hi<br/>#{h@ user.name}".html_safe
は非常に一般的で、認められた使用法です。
raw
とhtml_safe
実際には微妙な違いがあることに注意してください。例外raw(nil)
をnil.html_safe
スローする一方で、空の文字列を返します。
h
html_safe宣言を「元に戻す」ことはありません。文字列がある場合はhtml_safe
、h
何もしません。
繰り返しhtml_safe
が必要だと思います:文字列をHTMLエスケープしません。実際、文字列がエスケープされるのを防ぎます。
<%= "<script>alert('Hello!')</script>" %>
置くでしょう:
<script>alert('Hello!')</script>
あなたのHTMLソースに(そう、とても安全です!)、同時に:
<%= "<script>alert('Hello!')</script>".html_safe %>
警告ダイアログがポップアップ表示されます(それでよろしいですか?)。したがって、おそらくhtml_safe
ユーザーが入力した文字列を呼び出したくないでしょう。
html_safe
んではないエスケープもアンエスケープ。HTMLセーフではないものとしてマークし、ERB <%=タグの暗黙的なエスケープを使用した最終結果は、データをアンエスケープしてから出力で再エスケープすることと同じかもしれませんが、機能的にはどちらも行いません。(6 * -1 * -1)と6の違いのようなもの
違いはRails html_safe()
とraw()
です。これに関するイェフダ・カッツの優れた投稿があり、それは本当にこれに要約されます:
def raw(stringish)
stringish.to_s.html_safe
end
はい、文字列への入力を強制し、それを呼び出すraw()
ラッパーです。また、モジュールのヘルパーであるのに対して、新しいActiveSupport :: SafeBufferインスタンスを作成するStringクラスのメソッド— フラグが含まれています。html_safe()
html_safe()
raw()
html_safe()
@dirty
「Railsのhtml_safe vs. raw」を参照してください。
html_safe
:
文字列を信頼できる安全なものとしてマークします。HTMLに挿入され、追加のエスケープは実行されません。
"<a>Hello</a>".html_safe
#=> "<a>Hello</a>"
nil.html_safe
#=> NoMethodError: undefined method `html_safe' for nil:NilClass
raw
:
raw
は単なるラッパーhtml_safe
です。raw
文字列がなる可能性がある場合に使用しますnil
。
raw("<a>Hello</a>")
#=> "<a>Hello</a>"
raw(nil)
#=> ""
h
のエイリアスhtml_escape
:
HTMLタグ文字をエスケープするためのユーティリティメソッド。このメソッドを使用して、安全でないコンテンツをエスケープします。
Rails 3以降ではデフォルトで使用されるため、このメソッドを明示的に使用する必要はありません
最も安全な方法は次のとおりです。 <%= sanitize @x %>
XSSを回避します!
Simple Railsの用語では:
h
htmlタグを数字の文字に削除して、レンダリングによってHTMLが壊れないようにする
html_safe
文字列にブール値を設定して、文字列がHTML保存と見なされるようにします
raw
html_safeを文字列に変換します
h
isはhtml_safe
、HTMLがそのままレンダリングされることを意味します。
<%== @x %>
、<%= raw(@x) %>
edgeguides.rubyonrails.org