У меня проблема с персонажем ‘é’.
С ftp_nlist($this->ftpStream, $directory);
У меня есть такая строка ‘Parté.mp4’, но ‘é’ не соответствует регулярному выражению [\p{L}]*\.mp4
Здесь есть пример:
Тот, кто работает: http://regex101.com/r/yH9xG0/1
Тот, кто не: http://regex101.com/r/bI4lN2/2
Код ASCII ‘é’, который не работает, это ‘101 204 129’.
Функция ord($e);
где $ e — странный символ возврата ‘101’, который является кодом простой буквы e.
Кажется, мой «é» состоит из трех символов, потому что я должен сделать
$e = substr($fileName,4,3);
чтобы получить мой единственный персонаж.
Я хотел бы иметь возможность разрешить эти символы в моем регулярном выражении …
Если у вас есть какие-либо предложения, спасибо.
Используйте расширенную опцию Unicode.
\X*.mp4
Вот Руководство по PHP это описывает расширенный параметр Unicode.
Экранирование \ X соответствует кластеру расширенных графем Unicode. Расширенный
кластер графемы — это один или несколько символов Юникода, которые объединяются в
образуют один глиф. По сути, это можно рассматривать как Unicode
эквивалент. как это будет соответствовать одному составленному символу, независимо от
сколько отдельных символов фактически используется для его визуализации.
Когда вы говорите «ASCII-код« é », который не работает,« 101 204 129 »», вы, вероятно, имеете в виду, что байтов эти числа в десятичном виде. (Они не являются кодами ASCII: они не должны интерпретироваться в соответствии с ASCII и, кроме того, ASCII заканчивается десятичным числом 127). В шестнадцатеричном формате это означает 65 CC 81. Это правильный UTF-8 представительство базовой латинской буквы «е» U + 0065, за которой следует U + 0301 КОМБИНИРОВАНИЕ ОСТРЫЙ АКЦЕНТ. Это в свою очередь является правильным разложенный представление «é».
Таким образом, сначала нужно решить проблему кодировки символов. Вы должны иметь дело не с байтами UTF-8 символа, а с самим персонажем. Вам может потребоваться изменить подпрограммы для чтения данных, или, возможно, исправить сами данные, если они были спрятаны.
Если вы правильно прочитали данные UTF-8, комбинированный острый акцент все еще остается проблемой для сопоставления, поскольку он не является буквой. Возможно, вам придется преобразовать данные в форму нормализации C, которая превращает двухсимвольную комбинацию в букву «é».