Нужно регулярное выражение для многоязычного поискового запроса utf8

Мне нужно регулярное выражение для использования с preg_replace Функция PHP в форме поиска ввода для использования в SQL полнотекстовый поиск в многоязычной базе данных MySQL utf8. Я рассмотрел использование PHP filter_var с FILTER_SANITIZE_STRING, но я закончил с preg_replace:

Я хочу эти функции:

  1. оставить пробелы и только один, если больше в строке (последовательные пробелы)
  2. сохранить двойные кавычки и только одну, если больше в строке (чтобы я мог использовать его в phrase в IN BOOLEAN MODE)
  3. держать - & + & '~' и только один, если больше подряд
  4. поскольку я хочу, чтобы он был многоязычным, он также должен учитывать буквы Unicode (utf8)
  5. У меня нет / нужно акценты для рассмотрения.

Вот что я сделал:

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

Но вывод меня не устраивает вроде с кавычками (") и минус (-). Как я могу написать безопасную строку запроса для использования в моем окне поиска?

Есть ли лучшие практики, чем использование preg_replace?

1 ответ

Вы должны сделать 2 preg_replace.

1- Заменить недопустимые символы ничем:

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

2- Замените несколько символов, подобных пробелам, ~, +, ", - только на один:

$q = preg_replace('/([\s~+"-])\1+/', "$1", $q);
Другие вопросы по тегам