我需要一个Regex for与搜索表单输入中的preg_replace
php函数一起使用,以便在MySQL多语言utf8数据库中进行SQL
全文搜索。我曾考虑将php filter_var
与FILTER_SANITIZE_STRING
一起使用,但最终使用了preg_replace
:
我想要这些功能:
- 保留空格,如果一行中有多个,则只保留一个空格(串行空格)
- 保留双引号,如果一行中有多个,则只保留一个(这样我就可以在
IN BOOLEAN MODE
中的phrase
中使用它) - 保持
-
&+
&'~'如果一行中有多个,则只有一个 - 由于我希望它是多语言的,它也应该考虑Unicode(utf8)字母
- 我不需要考虑口音
这就是我所做的:
$q = addslashes($q);
$q = preg_replace('/[^'w'd's's+'p{L}]/u', "", $q);
但输出并不能满足我对引号("
)和减号(-
)的喜欢。如何编写安全的查询字符串以在搜索框中使用?
有比使用preg_replace
更好的做法吗?
您必须执行2次preg_replace。
1-不替换无效字符:
$q = preg_replace('/[^'p{L}'d's~+"-]+/', '', $q);
2-将多个类似字符的空格,~,+,",-仅替换为一个:
$q = preg_replace('/(['s~+"-])'1+/', "$1", $q);