Нужно регулярное выражение для многоязычного поискового запроса utf8
Мне нужно регулярное выражение для использования с preg_replace
Функция PHP в форме поиска ввода для использования в SQL
полнотекстовый поиск в многоязычной базе данных MySQL utf8. Я рассмотрел использование PHP filter_var
с FILTER_SANITIZE_STRING
, но я закончил с preg_replace
:
Я хочу эти функции:
- оставить пробелы и только один, если больше в строке (последовательные пробелы)
- сохранить двойные кавычки и только одну, если больше в строке (чтобы я мог использовать его в
phrase
вIN BOOLEAN MODE
) - держать
-
&+
& '~' и только один, если больше подряд - поскольку я хочу, чтобы он был многоязычным, он также должен учитывать буквы Unicode (utf8)
- У меня нет / нужно акценты для рассмотрения.
Вот что я сделал:
$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);