3

投稿のタイトルを出力しているとしましょう。データベースでは、Hello Y’allを使用.html_safeせずに出力できますが、htmlで出力されないようにできますHello Y’allか?

つまり、ユーザーが活字で正しいアポストロフィを使用するワードプロセッサから投稿タイトルをコピーする&と、データベース内でをとしてエスケープしているため、ぎこちない出力が表示されます&。もちろん、正しいHTMLであるため、Bonnie & Clyde出力されるデータベースのタイトルが必要です...Bonnie & Clyde

これを行うための安全な方法はありますか?

4

4 に答える 4

10

ActionView :: Helpers::SanitizeHelperを使用する

<%= "Hello Y&#8217;all" %>
<%= sanitize "Hello Y&#8217;all" %>

生成されます:

Hello Y&#8217;all
Hello Y’all
于 2013-06-08T22:57:02.250 に答える
1

これを行うには3つの方法があります。

1: "string".htmlsafe
2: <%= raw "string" %>
3. <%== "string" %>

引数を取るので<%= raw "string"%>を使用し、それに.to_sを適用してから、単にhtml_safeを適用する必要があると思います。したがって、2番目のオプションを使用しても安全です。

于 2012-11-05T18:44:51.340 に答える
1

SafeBufferは、そうERB::Util.hでない文字列を呼び出すためhtml_safe、データベースに文字列を最初に保存するときに、のインスタンスをgsubオンにERB::Util.h(your_string)して置き換えることができます。そうすればあなたの弦は最初に消毒されます&amp;[code]&[code];

必要な電話はERB::Util.h(your_string).gsub(/&amp;(#x?[\da-fA-F]+;)/, '&\1')

次に、その特定の文字列を表示する必要があるときはいつでも、それを呼び出しますhtml_safe

于 2012-11-05T20:17:14.400 に答える
0

<%= raw "Y&amp;#8217;all" %>または<%== "Y&amp;#8217;all" %>2つの可能性があります。

于 2012-11-05T18:46:43.370 に答える