Европейский символ «é» с кодом ASCII 101 204 129

У меня проблема с персонажем ‘é’.

С ftp_nlist($this->ftpStream, $directory);
У меня есть такая строка ‘Parté.mp4’, но ‘é’ не соответствует регулярному выражению [\p{L}]*\.mp4

Здесь есть пример:

Код ASCII ‘é’, который не работает, это ‘101 204 129’.
Функция ord($e); где $ e — странный символ возврата ‘101’, который является кодом простой буквы e.

Кажется, мой «é» состоит из трех символов, потому что я должен сделать
$e = substr($fileName,4,3); чтобы получить мой единственный персонаж.

Я хотел бы иметь возможность разрешить эти символы в моем регулярном выражении …
Если у вас есть какие-либо предложения, спасибо.

0

Решение

Используйте расширенную опцию Unicode.

\X*.mp4

Regex Demo

Вот Руководство по PHP это описывает расширенный параметр Unicode.

Экранирование \ X соответствует кластеру расширенных графем Unicode. Расширенный
кластер графемы — это один или несколько символов Юникода, которые объединяются в
образуют один глиф. По сути, это можно рассматривать как Unicode
эквивалент. как это будет соответствовать одному составленному символу, независимо от
сколько отдельных символов фактически используется для его визуализации.

2

Другие решения

Когда вы говорите «ASCII-код« é », который не работает,« 101 204 129 »», вы, вероятно, имеете в виду, что байтов эти числа в десятичном виде. (Они не являются кодами ASCII: они не должны интерпретироваться в соответствии с ASCII и, кроме того, ASCII заканчивается десятичным числом 127). В шестнадцатеричном формате это означает 65 CC 81. Это правильный UTF-8 представительство базовой латинской буквы «е» U + 0065, за которой следует U + 0301 КОМБИНИРОВАНИЕ ОСТРЫЙ АКЦЕНТ. Это в свою очередь является правильным разложенный представление «é».

Таким образом, сначала нужно решить проблему кодировки символов. Вы должны иметь дело не с байтами UTF-8 символа, а с самим персонажем. Вам может потребоваться изменить подпрограммы для чтения данных, или, возможно, исправить сами данные, если они были спрятаны.

Если вы правильно прочитали данные UTF-8, комбинированный острый акцент все еще остается проблемой для сопоставления, поскольку он не является буквой. Возможно, вам придется преобразовать данные в форму нормализации C, которая превращает двухсимвольную комбинацию в букву «é».

0

По вопросам рекламы [email protected]