在对 mySQL 数据库执行搜索之前,我的软件使用以下内容:
$keywords_search = preg_replace("/[^a-zA-Z0-9 ]/", "", $keywords_search);
问题在于,由于非常常见的“ñ”字符,它删除了用户可能在其他语言中使用的单词,例如“españa”(西班牙语)。
有什么方法可以在 preg_replace 中允许某些特殊字符?
在对 mySQL 数据库执行搜索之前,我的软件使用以下内容:
$keywords_search = preg_replace("/[^a-zA-Z0-9 ]/", "", $keywords_search);
问题在于,由于非常常见的“ñ”字符,它删除了用户可能在其他语言中使用的单词,例如“españa”(西班牙语)。
有什么方法可以在 preg_replace 中允许某些特殊字符?
如果您想确保您的关键字不包含任何恶意代码,这不是一个可行的方法,您应该阅读以下内容:
如果您只想过滤您的搜索词组,您可以使用该\p{L}
模式来匹配任何字母和\p{N}
任何数字字符。你也应该u
像这样使用修饰符:/\p{L}+/u
也一定要检查这个问题:
你可以试试这个
$keywords_search = preg_replace("/[^\w-\p{L}\p{N}\p{Pd}]/", "", $keywords_search);
这将匹配任何不是字母数字字符(包括 UTF-8 字母)以及破折号 (-) 的内容。