3

私は現在、次のコードを使用して、文字列を保存する前に文字列をサニタイズしています。

ERB::Util::h(string)

私の問題は、文字列がすでに次のようにサニタイズされている場合に発生します。

string = "Watching baseball `&` football"

サニタイズされた文字列は次のようになります。

sanitized_string = "Watching baseball `&` football"

<を置換によって&lt;>に変換するだけでサニタイズできますか?&gt;

4

4 に答える 4

3

最初にエスケープ解除してから、再度エスケープします。

require 'cgi'
string = "Watching baseball &amp; football"

CGI.escapeHTML(CGI.unescapeHTML(string))

=> "Watching baseball &amp; football"
于 2009-10-21T20:54:55.570 に答える
0

Erubis からのこのスニペットに基づく高速アプローチ。

ESCAPE_TABLE = { '<'=>'&lt;', '>'=>'&gt;' }
def custom_h(value)
   value.to_s.gsub(/[<>]/) { |s| ESCAPE_TABLE[s] }
end
于 2009-10-21T20:55:04.367 に答える
0

はい、できます。さらに、次のような基本的な正規表現を使用してタグ全体を削除することもできます。

mystring.gsub( /<(.|\n)*?>/, '' )
于 2009-10-21T20:55:21.273 に答える
0

独自のサニタイザーを作成することもできますが、サニタイズには多くのコーナー ケースとトリッキーなエッジがあります。

より良いアプローチは、文字列をサニタイズする前にエンコードを解除することです.h()には、最初に文字列を通すことができる逆がありますか?

于 2009-10-21T20:55:57.267 に答える