Поддержка кодирования PCRE - PullRequest
1 голос
/ 12 июля 2011

Я видел в документации PCRE , что PCRE поддерживает UTF-8 и Unicode general свойства категории, но я не вижу, где это говорит Поддержка родного кодирования.

Если вы говорите, что поддерживает ISO-8859-1: где я могу найти информацию об этом?

В двух словах:

Я сравнил и предположил, что кодировка, поддерживаемая PHP , - это windows-1252, а не кодировка ISO-8859-1.

if(preg_match('/€/',"\x80"))
    echo "Match";

ISO-8859-1 не имеет '€' в этой позиции. Windows-1252 делает. Или зависит от системы?

Так какая же поддержка PCRE для родной кодировки?

1 Ответ

4 голосов
/ 12 июля 2011

Именно этот пример используется на регулярных выражениях для описания трудностей, связанных с смешиванием 8-битного и юникода

Смешивание Unicode и 8-битных кодов символов

Короче говоря, символ евро находится на 80h на всех кодовых страницах Windows. То, как ваш движок регулярных выражений относится к этому, может отличаться. Он работает, когда ваш движок регулярных выражений является 8-битным, а текстовый файл использует кодовую страницу Windows.
Если ваш механизм регулярных выражений является чисто юникодным, он будет читать \ x80 как \ u0080, который является управляющим кодом.

Так что вы имеете в виду с поддержкой кодирования PCRE? Это зависит от системы, и вам не следует полагаться на некоторые кодовые страницы.

Преимущество юникода в том, что вы можете избавиться от всех различных кодовых страниц и всех проблем, связанных с этим.

Таким образом, чтобы использовать юникод для этого, попробуйте сопоставить \x{20AC} это кодовая точка юникода для символа евро.

Вот краткий обзор регулярных-выражений.info о синтаксисе Unicode

...