私はh
をHTMLにエンコードしていますが、アポストロフィに問題があります。より正確に言えば、アポストロフィは'
として終わり、明らかに私が表示したくないことが分かります。Rails 2でHTMLエンコードアポストロフィが予期しない結果をもたらすのはなぜですか?
これはなぜ起こっているのですか?私の研究では、HTMLエンコーディングはアポストロフィに影響しないはずです。
私はh
をHTMLにエンコードしていますが、アポストロフィに問題があります。より正確に言えば、アポストロフィは'
として終わり、明らかに私が表示したくないことが分かります。Rails 2でHTMLエンコードアポストロフィが予期しない結果をもたらすのはなぜですか?
これはなぜ起こっているのですか?私の研究では、HTMLエンコーディングはアポストロフィに影響しないはずです。
これは興味深い質問です。私はどのように矛盾しているのが見えているのですかh
AKA html_escape
はアポストロフィAKA "'"
を処理します。
ERB::Util 2.6.6用のRDocによると:IRBで
ESCAPE_TABLE = { '&'=>'&', '<'=>'<', '>'=>'>', '"'=>'"', "'"=>''', }
gem list erubis
*** LOCAL GEMS ***
erubis (2.6.6)
私は以下を参照してください
Welcome to IRB. You are using ruby 1.9.2p136 (2010-12-25 revision 30365) [x86_64-darwin10.5.0]. Have fun ;)
>> require 'erb' #=> true
>> ERB::Util.html_escape("foo'bar") #=> "foo'bar"
>> ERB::Util.html_escape('foo"bar') #=> "foo"bar"
EDIT:
へぇ、それはバグですか、で少なくとも一貫性のない方法を使用してください。 gsub
に渡される文字列は"'"
が含まれていない
# File 'lib/erubis/helpers/rails_helper.rb', line 342
def h(value)
value.to_s.gsub(/[&<>"]/) {|s| ESCAPE_TABLE[s] }
end
注意:ここではソースですか?つまり、ESCAPE_TABLEのルックアップは一重引用符/アポストロフィでは呼び出されません。
そして、私たちは皆、ビスケットの要点がアポストロフィーであることを知っています。 :-)
あなたのバージョンのRailsでh
またはhtml_escape
の定義を見ると、その文字列にアポストロフィが含まれていることがわかります。
解決方法は、ERB/Erubisをアップグレードするか、h
/html_escape
の定義を上書きすることです。上記の定義を出発点として使用できます。
Ruby on Rails 3は自動的にh
になります。これはもはや必要ではありません。あなたはそれをエスケープせず、出力は何もしたくない場合は、
<%= @post.body %>
代わりの
<%=h @post.body %>
を使用raw
を使用します。
<%=raw @post.body %> <!-- For example, for use in a plaintext format */
恐れています。私はレール2を使用しているので、問題はまだありません。私はこの情報を含めるために私の質問を編集します。 – tiswas
@tiswasこの問題は、同じ問題を抱えているRails 3ユーザーには残しておきます。私はそれをCommunity Wikiにします。 –
actionpack/lib/action_view/erb/util.rb
アポストロフィでソースコードを見てから、エンコードされていません、& > < "
文字のみです。
私の推測では、あなたのRailsアプリケーションのどこかにライブラリ/プラグイン/ gemがhtml_escape
またはHTML_ESCAPE
の定数を再定義したと思います。データベースで直接データをチェックして、保存時にまだエンコードされていないことを確認する必要があります。
私はこの問題は、実際に私は、テキストを表示するためにtruncate
機能を使用していたということのようです '
としてアポストロフィを表示していましレール4に同様の問題がありました。それが削除されると、アポストロフィは期待どおりに表示されます。
この場合、切り捨てるオプションとしてescape:false
を追加すると、問題が解決されます。
本当に '&#39;')が表示されているものに '''が出力されていますか、それともhtmlを表示しているときに表示されていますか? –
yup - ユーザーが見ている' – tiswas