Ruby Sanitize Code…なぜ&消毒された
質問
現在、次のコードを使用して、文字列を保存する前にサニタイズします:
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 = { '<'=>'<', '>'=>'>' }
def custom_h(value)
value.to_s.gsub(/[<>]/) { |s| ESCAPE_TABLE[s] }
end
はい、できます。またはさらに進めると、次のような基本的な正規表現を使用してタグ全体を削除できます。
mystring.gsub( /<(.|\n)*?>/, '' )
独自のサニタイザーを作成することもできますが、サニタイズには多くのコーナーケースとトリッキーなエッジがあります。
より良いアプローチは、文字列をサニタイズする前にエンコードを解除することです。h()には、文字列を最初に挿入できる逆関数がありますか?
所属していません StackOverflow