如何防止PHP中的preg_replace剥离出一些特殊字符

时间:2013-09-26 14:10:13

标签: php preg-replace

我的软件在对mySQL数据库执行搜索之前使用以下内容:

$keywords_search = preg_replace("/[^a-zA-Z0-9 ]/", "", $keywords_search);

问题在于它正在剥离用户可能在其他语言中使用的词语,例如“españa”(西班牙语),因为“ñ”字符非常常见。

有没有办法在preg_replace中允许某些特殊字符?

2 个答案:

答案 0 :(得分:0)

如果您想确保您的关键字不包含任何恶意代码,那么这不是一种方法,您应该阅读:

How can I prevent sql injection in php

如果您只想过滤搜索词组,可以使用\p{L}模式将任何字母和\p{N}匹配到任何数字字符。您还应该使用u修饰符:/\p{L}+/u

另外请务必查看以下问题:

Regular expression \p{L} and \p{N}

答案 1 :(得分:0)

你可以试试这个

$keywords_search = preg_replace("/[^\w-\p{L}\p{N}\p{Pd}]/", "", $keywords_search);

这将匹配任何非字母数字字符(包括UTF-8字母)以及短划线( - )。