Символ 'é' с кодом ACSII 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); чтобы получить мой единственный персонаж.

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

2 ответа

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

\X*.mp4

Regex Demo

Вот руководство по PHP, которое описывает расширенную опцию Unicode.

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

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

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

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

Другие вопросы по тегам