RailsビューのHTMLエスケープは#link_toなどのヘルパーメソッドで解除されることがある

こんにちは、hachi8833です。 ここでは次のような結果を期待していました。以下コード中の&はエスケープを表示するために全角の&にしています。 <%= link_to ‘#’, data: {key: ‘<span>piyopiyo</span>’} %> <!– 元のERBコード –> <a href=”#” data-key=”&lt;span&gt;piyopiyo&lt;/span\&gt;”> <!– 期待するHTML出力 –> <a href=”#” data-key=”<span>piyopiyo</span>”> <!– 実際のHTML出力 –> Railsビューのエスケープ系操作は、#html_safeメソッドの名前が微妙に紛らわしいせいかときどき迷うことがあるので、まず整理してみました。 Railsのビューにおけるエスケープ 一般的なHTMLエスケープについてまずまとめました。 エスケープした場合としなかった場合 コントローラとビューにそれぞれ以下のように書いたとします。 ## コントローラ @h1 = “<h1>Railsドキュメント</h1>” <!– ビューのERB –> <%= @h1 %> @h1変数がエスケープされれば以下が出力され、 <!– ビューのERBから出力されるHTML –> &lt;h1&gt;Railsドキュメント&lt;/h1&gt; ブラウザでタグとして解釈されずに以下のように表示されます。上のSlackのやりとりではこのような出力を期待していました。 @h1変数がエスケープされなければ以下が出力され、 <!– ビューのERBから出力されるHTML –> <h1>Railsドキュメント</h1> ブラウザでh1タグとして解釈されてたとえば以下のように表示されます。 ビューの文字列はデフォルトでエスケープされる 安全のため、Rails 3 … Continue reading RailsビューのHTMLエスケープは#link_toなどのヘルパーメソッドで解除されることがある