-2

サニタイズ("こんにちは") => こんにちは

しかし、私が持っている場合

sanitize("<3") 3 のみを返す

< または > で終わらない場合は文字列を許可する必要があります

たとえば、sanitize("<3 >4") を実行すると、単純に <3 >4 が返されます。

4

2 に答える 2

3

まず、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"
于 2012-12-10T16:36:43.317 に答える
0

保持したい値を適切にエンコードするために、コンテンツを事前にクリーンアップする必要があります。例えば:

content.gsub!(/\<3/, '&lt;3')

唯一の懸念は、クリーナーがこれを二重にエスケープする可能性があり、&amp;lt;3迷惑になる可能性があることです. 少なくとも、必要に応じて元に戻すことができます。

無効なブラケットを削除せずに「サニタイズ」することはできません。一部のブラウザはそのようなことで窒息し、正しく処理しないとページが完全に破損する可能性があります.

于 2012-12-10T16:29:13.080 に答える