1

HTMLとテキストが混在するフォームフィールドがあります。ユーザーが基本的なHTMLと句読点を使用できるようにしたいと思います。

現在、mysql_real_escape_stringpreg_replaceを使用してデータをサニタイズし、データベースに挿入しています。私の理解では、preg_replaceは、許可された文字のホワイトリストにない文字を削除する最良の方法であり、mysql_real_escape_stringはSQLインジェクションから保護します。

//How I collect and sanitise the data...
$var=mysql_real_escape_string(
 preg_replace("/[^A-Za-z0-9-?!$#@()\"'.:;\\@,_ =\/<> ]/",'',$_POST['var'])
);

ただし、ハッシュ文字を使用すると壊れ続けます。

私の質問は次のとおりです。

1)これを行うためのより効率的な方法はありますか?

2)これが最善の方法である場合、私は何を間違っていますか?

許可する必要のある文字は次のとおりです。すべての英数字と:

?!@#$%&()-。、:; '"<> / + =

ありがとう!

4

2 に答える 2

4

strip_tags()を使用して、必要なタグに制限しないのはなぜですか?

strip_tags ($str,"<br>")

次に、それほど侵襲的ではない他の「衛生状態」を行うことができます。

于 2010-02-09T15:16:11.863 に答える
2

英数字以外の文字の多くは正規表現で特別な意味を持っているため、すべてをエスケープする必要があります。それで

preg_replace("/[^A-Za-z0-9-?!$#@()\"'.:;\\@,_ =\/<> ]/",'',$_POST['var']) 

になります(おそらくエスケープする必要がないものがいくつかありますが、害はありません)

preg_replace("/[^A-Za-z0-9-\?\!\$\#\@\(\)\"\'\.\:\;\\@\,\_ \=\/\<\> ]/",'',$_POST['var']) 
于 2010-02-09T15:21:25.463 に答える