質問

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

ERB::Util::h(string)

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

string = "Watching baseball `&` football"

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

sanitized_string = "Watching baseball `&` football"

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

役に立ちましたか?

解決

最初にエスケープし、次に再度エスケープします:

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

CGI.escapeHTML(CGI.unescapeHTML(string))

=> "Watching baseball & football"

他のヒント

エルビスのこのスニペットに基づいた高速アプローチ。

ESCAPE_TABLE = { '<'=>'&lt;', '>'=>'&gt;' }
def custom_h(value)
   value.to_s.gsub(/[<>]/) { |s| ESCAPE_TABLE[s] }
end

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

mystring.gsub( /<(.|\n)*?>/, '' )

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top