2013-09-26 46 views
0

我的软件使用MySQL数据库上执行搜索之前执行以下操作:如何防止preg_replace函数在PHP从剥离出一些特殊的字符

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

的问题是,它剥离出来,使用者可以在其他语言中使用的话,像“españa”(西班牙语),因为“ñ”字符非常常见。

有什么办法可以允许preg_replace中的某些特殊字符?

+0

http://www.regular-expressions.info/unicode.html –

回答

0

如果你想确保你的关键字不包含任何恶意代码,这不是很长的路要走,你应该阅读:

How can I prevent sql injection in php

如果你只是想过滤的搜索短语,您可以使用\p{L}模式将任何字母和\p{N}与任何数字字符匹配。你也应该使用u修改如下:/\p{L}+/u

此外,一定要检查这个问题:

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

0

你可以用这一个

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

这将匹配任何不尝试一个字母数字字符(包括UTF-8字母)以及破折号( - )。

+0

dash包含在'\ p {Pd}'(不确定为下划线),'\ w'包含在'[\ pL \ PN ]'因此它变成:'[^ \ pL \ pN \ p {Pd} _]' – Toto