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

0

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

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

Вот пример:

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

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

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

  • 0
    это не "3 символа". это 3-байтовый символ Юникода. Вы включили режим Unicode в своем регулярном выражении? /.../u ?
  • 0
    Да, без u \p{L} не работает
Показать ещё 1 комментарий
Теги:
character-encoding
ord

2 ответа

2

Используйте расширенный вариант юникода.

\X*.mp4

Демо-версия Regex

Здесь вы найдете руководство по PHP, которое описывает расширенный вариант unicode.

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

0

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню