2

Rails 2 で一部のテキストを HTML エンコードするために使用hしていますが、アポストロフィに問題があります。より正確に言うと、アポストロフィが最終的'に表示したくないものになっていることがわかりました。

なぜこれが起こっているのか誰にも考えがありますか?私の調査によると、HTML エンコーディングはアポストロフィに影響を与えるべきではありません。

4

4 に答える 4

5

これは興味深い質問です。AKAがアポストロフィ AKA を処理hする方法に一貫性がありません。html_escape"'"

ERB::Util 2.6.6の RDoc によると:

ESCAPE_TABLE = { '&'=>'&amp;', '<'=>'&lt;', '>'=>'&gt;', '"'=>'&quot;', "'"=>'&#039;', }

gem list erubis
*** LOCAL GEMS ***
erubis (2.6.6)

IRB では次のように表示されます。

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&quot;bar"

編集:

へー、それはメソッドのバグか、少なくとも矛盾hです。ソースは次のとおりです。

# File 'lib/erubis/helpers/rails_helper.rb', line 342

def h(value)
  value.to_s.gsub(/[&<>"]/) {|s| ESCAPE_TABLE[s] }
end

に渡される文字列に?gsubが含まれていないことに注意してください。"'"つまり、ESCAPE_TABLE のルックアップは、単一引用符/アポストロフィでは呼び出されません。

そして、ビスケットの核心はアポストロフィであることは誰もが知っています. :-)

hhtml_escape使いのバージョンの Railsの定義を確認すると、その文字列にアポストロフィが含まれていることがわかると思います。

修正は、ERB/Erubis をアップグレードするか、h/html_escape定義を上書きして正しくすることです。上記の定義を出発点として使用できます。

于 2011-02-04T15:31:34.090 に答える
3

アポストロフィが次のように表示されるRails 4でも同様&#39; の問題がありました。問題は、実際にtruncateはテキストを表示するために関数を使用していたようです。それが削除されると、アポストロフィが期待どおりに表示されます。

この場合escape:false、truncate のオプションとして追加すると問題が解決します。

于 2014-05-27T08:40:16.290 に答える
1

actionpack/lib/action_view/erb/util.rbアポストロフィのソースコードを見ると、エンコードされておらず、& > < "文字のみです。

私の推測では、Rails アプリのどこかにライブラリ/プラグイン/gem が再定義されているhtml_escapeか、HTML_ESCAPE定数があると思います。また、データベース内のデータを直接チェックして、保存時にまだエンコードされていないことを確認する必要があります。

于 2011-02-04T15:19:02.583 に答える
1

Ruby on Rails 3 はh自動的に行います。これはもう必要ありません。使用する

<%= @post.body %>

それ以外の

<%=h @post.body %>

エスケープせずに何かを出力したい場合は、次を使用しますraw

<%=raw @post.body %> <!-- For example, for use in a plaintext format */
于 2011-02-04T14:59:17.990 に答える