-1

我需要一个正则表达式,以便preg_replace在搜索表单输入中与 php 函数一起使用,以便在SQLMySQL 多语言 utf8 数据库中进行全文搜索。我曾考虑将 phpfilter_var与 一起使用FILTER_SANITIZE_STRING,但最终得到preg_replace

我想要这些功能:

  1. 保留空格,如果连续有多个,则仅保留一个(连续空格)
  2. 保留双引号,如果有更多,则只保留一个(以便我可以在phrasein 中使用它IN BOOLEAN MODE
  3. 保持-& +& '~' 并且只有一个如果连续更多
  4. 因为我希望它是多语言的,所以它也应该考虑 Unicode (utf8) 字母
  5. 我没有/不需要考虑口音。

这就是我所做的:

$q = addslashes($q);
$q = preg_replace('/[^\w\d\s\s+\p{L}]/u', "", $q);

但是输出并不能满足我对引号(")和减号(-)的喜欢。如何编写一个安全的查询字符串以在我的搜索框中使用?

有没有比使用更好的做法preg_replace

4

1 回答 1

1

你必须做 2 个 preg_replace。

1-用任何内容替换无效字符:

$q = preg_replace('/[^\p{L}\d\s~+"-]+/', '', $q);

2- 只用一个替换多个字符,如空格、~、+、"、-:

$q = preg_replace('/([\s~+"-])\1+/', "$1", $q);
于 2013-07-08T09:15:50.693 回答