我的软件在对mySQL数据库执行搜索之前使用以下内容:
$keywords_search = preg_replace("/[^a-zA-Z0-9 ]/", "", $keywords_search);
问题在于它正在剥离用户可能在其他语言中使用的词语,例如“españa”(西班牙语),因为“ñ”字符非常常见。
有没有办法在preg_replace中允许某些特殊字符?
答案 0 :(得分:0)
如果您想确保您的关键字不包含任何恶意代码,那么这不是一种方法,您应该阅读:
How can I prevent sql injection in php
如果您只想过滤搜索词组,可以使用\p{L}
模式将任何字母和\p{N}
匹配到任何数字字符。您还应该使用u
修饰符:/\p{L}+/u
另外请务必查看以下问题:
答案 1 :(得分:0)
你可以试试这个
$keywords_search = preg_replace("/[^\w-\p{L}\p{N}\p{Pd}]/", "", $keywords_search);
这将匹配任何非字母数字字符(包括UTF-8字母)以及短划线( - )。