Я работаю над проверкой моего сценария комментирования, и мне нужно разбить все не-буквенно-цифровые символы, кроме тех, которые используются в Западной Европе.
Мой план состоит в том, чтобы повторно вывести все небуквенные символы с помощью:
preg_replace("/[^A-Za-z0-9 ]/", '', $string);
Но это до сих пор вытесняет всех европейских персонажей и знак, поэтому «Café Rouge» становится «Caf Rouge».
Как добавить массив европейских символов в указанное выше регулярное выражение.
Массив:
£, €, á, à, â, ä, æ, ã, å, è, é, ê, ë, î, ï, í, ì, ô, ö, ò, ó, ø, õ, û, ü, ù, ú, ÿ, ñ, ß
Я использую UTF-8
РЕШЕНИЕ:
$comment = preg_replace('/[^\p{Latin}\d\s\p{P}]/u', '', $comment);
а также
$name = preg_replace('/[^\p{Latin}]/u', '', $name);
$ name также удаляет знаки препинания и пробелы
Спасибо за быстрые ответы
preg_replace('/[^\p{Latin}\d ]/u', '', $str);
echo preg_replace('/[^A-Z0-9 £€áàâä...]/ui', '', $string);
Важная часть – флаг /u
. Убедитесь, что ваш исходный код и $string
кодируются в кодировке UTF-8.
Я все еще думаю, что это неправильный подход, потому что он сильно ограничивает то, что могут ввести ваши пользователи, и это будет раздражать некоторых, но что бы ни плавало на вашей лодке … BTW, ваш список не содержит знаков пунктуации.