/u
регулярное выражение исправляет эту проблему, если кто-то борется с этим. Кредит М.И. в комментариях 🙂
Рассмотрим следующий код:
var_dump('Trimiteţi');
preg_match('/^([\p{L}]+)/', 'Trimiteţi', $matches);
print_r($matches);
Я использую его для фильтрации слова, которое может иметь нелатинские символы, используя \p{L}
также обратите внимание, что я не использую конечную строку $
символ регулярного выражения в preg_match
Теперь к проблеме, при выполнении кода локально я получаю этот вывод:
string 'Trimiteţi' (length=10)
Array ( [0] => TrimiteÅ [1] => TrimiteÅ )
Я пытался выполнить код в Песочница PHP, и выводит нечто подобное:
string(10) "Trimiteţi"Array
(
[0] => Trimite�
[1] => Trimite�
)
Обратите внимание, что по крайней мере на этот раз он не испортил оригинал var_dump
слово.
Что здесь происходит? Почему использование preg_match меняет слово? Худшая часть об этом, если я добавлю $
до конца регулярного выражения, это будет НЕ СООТВЕТСТВУЕТ, так как я предполагаю, что эти преобразованные символы не могут быть интерпретированы как конец строки или что-то в этом роде. Пожалуйста, помогите мне
Изменить: код файла, который я запускаю, установлен на «text / x-php; charset = utf-8»
Edit2: дополнительно я использовал regex101.com, и при использовании РЕГУЛЯРНОГО ВЫРАЖЕНИЯ «^ [\ p {L}] + $» и слова «Trimiteţi» оно кажется совпадающим. Вы даже можете переключить РЕГУЛЯРНОЕ ВЫРАЖЕНИЕ на «^ ([\ p {L}] +) $», добавив группу захвата и вывод сайта:
MATCH 1
1. [0-9] `Trimiteţi`
Задача ещё не решена.
Других решений пока нет …