2014-11-19 2 views
0

У меня проблема с символом 'é'.'é' символ с кодом ACSII 101 204 129

С 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}' doesnt – iBadGamer

+0

Как насчет того, чтобы вручную копировать его в регулярное выражение? [\ Р {L} | é]. * \ Mp4 –

ответ

2

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

\X*.mp4 

Regex Demo

Вот PHP manual, который описывает расширенный вариант Юникода.

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

0

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

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

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