0

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

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

问题在于,由于非常常见的“ñ”字符,它删除了用户可能在其他语言中使用的单词,例如“españa”(西班牙语)。

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

4

2 回答 2

0

如果您想确保您的关键字不包含任何恶意代码,这不是一个可行的方法,您应该阅读以下内容:

如何防止php中的sql注入

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

也一定要检查这个问题:

正则表达式 \p{L} 和 \p{N}

于 2013-09-26T14:15:53.863 回答
0

你可以试试这个

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

这将匹配任何不是字母数字字符(包括 UTF-8 字母)以及破折号 (-) 的内容。

于 2013-09-26T14:16:09.223 回答