我的软件使用MySQL数据库上执行搜索之前执行以下操作:如何防止preg_replace函数在PHP从剥离出一些特殊的字符
$keywords_search = preg_replace("/[^a-zA-Z0-9 ]/", "", $keywords_search);
的问题是,它剥离出来,使用者可以在其他语言中使用的话,像“españa”(西班牙语),因为“ñ”字符非常常见。
有什么办法可以允许preg_replace中的某些特殊字符?
我的软件使用MySQL数据库上执行搜索之前执行以下操作:如何防止preg_replace函数在PHP从剥离出一些特殊的字符
$keywords_search = preg_replace("/[^a-zA-Z0-9 ]/", "", $keywords_search);
的问题是,它剥离出来,使用者可以在其他语言中使用的话,像“españa”(西班牙语),因为“ñ”字符非常常见。
有什么办法可以允许preg_replace中的某些特殊字符?
如果你想确保你的关键字不包含任何恶意代码,这不是很长的路要走,你应该阅读:
How can I prevent sql injection in php
如果你只是想过滤的搜索短语,您可以使用\p{L}
模式将任何字母和\p{N}
与任何数字字符匹配。你也应该使用u
修改如下:/\p{L}+/u
此外,一定要检查这个问题:
你可以用这一个
$keywords_search = preg_replace("/[^\w-\p{L}\p{N}\p{Pd}]/", "", $keywords_search);
这将匹配任何不尝试一个字母数字字符(包括UTF-8字母)以及破折号( - )。
dash包含在'\ p {Pd}'(不确定为下划线),'\ w'包含在'[\ pL \ PN ]'因此它变成:'[^ \ pL \ pN \ p {Pd} _]' – Toto
http://www.regular-expressions.info/unicode.html –