utf8多语言搜索查询需要regex


Need regex for utf8 multilingual search query

我需要一个Regex for与搜索表单输入中的preg_replace php函数一起使用,以便在MySQL多语言utf8数据库中进行SQL全文搜索。我曾考虑将php filter_varFILTER_SANITIZE_STRING一起使用,但最终使用了preg_replace:

我想要这些功能:

  1. 保留空格,如果一行中有多个,则只保留一个空格(串行空格)
  2. 保留双引号,如果一行中有多个,则只保留一个(这样我就可以在IN BOOLEAN MODE中的phrase中使用它)
  3. 保持-&+&'~'如果一行中有多个,则只有一个
  4. 由于我希望它是多语言的,它也应该考虑Unicode(utf8)字母
  5. 我不需要考虑口音

这就是我所做的:

$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);