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 回答