サニタイズ("こんにちは") => こんにちは
しかし、私が持っている場合
sanitize("<3") 3 のみを返す
< または > で終わらない場合は文字列を許可する必要があります
たとえば、sanitize("<3 >4") を実行すると、単純に <3 >4 が返されます。
サニタイズ("こんにちは") => こんにちは
しかし、私が持っている場合
sanitize("<3") 3 のみを返す
< または > で終わらない場合は文字列を許可する必要があります
たとえば、sanitize("<3 >4") を実行すると、単純に <3 >4 が返されます。
まず、Rails に組み込まれているサニタイズは、不正な形式のマークアップを処理しません。
不正な形式である可能性があるものに対処するには、Sanitize gem を使用することを強くお勧めします。
https://github.com/rgrove/sanitize
しかし、あなたの問題は、html でエンコードされていない文字エンティティです。それらを CGI.escape() で実行します
require 'cgi'
CGI.escape('<3') # => "%3C3"
仕上げのために:
require 'cgi'
Sanitize.clean( CGI.escape('<3') ) # => "%3C3"
保持したい値を適切にエンコードするために、コンテンツを事前にクリーンアップする必要があります。例えば:
content.gsub!(/\<3/, '<3')
唯一の懸念は、クリーナーがこれを二重にエスケープする可能性があり、&lt;3
迷惑になる可能性があることです. 少なくとも、必要に応じて元に戻すことができます。
無効なブラケットを削除せずに「サニタイズ」することはできません。一部のブラウザはそのようなことで窒息し、正しく処理しないとページが完全に破損する可能性があります.