Есть ли возможность написать свой собственный конвертер punycode в php без расширения intl?
У меня нет такого большого контроля над удаленным сервером для установки расширений, php 5.3.8. Но я заметил, что есть возможность разбить строку utf-8 с помощью pcre.
Так, например: preg_split('@@u','bücher',-1,PREG_SPLIT_NO_EMPTY);
дает: Array ( [0] => b, [1] => ├╝, [2] => c, [3] => h, [4] => e, [5] => r )
или для китайского слова: 中国 / 中华 это дает: Array ( [0] => ńŞş, [1] => ňŤŻ, [2] => /, [3] => ńŞş, [4] => ňŹÄ )
(результаты отображаются не в Юникоде), но ясно, что можно разделить utf-8
строка без международных расширений, и тогда (я думаю) должна быть возможность получать коды символов и делать с ними вычисления для создания ascii url.
1 ответ
Единственное, что вам нужно знать, это битовые маски, которые сигнализируют о двух-, трех-, четырехбайтовых кодовых точках:
Таблица от http://en.wikipedia.org/wiki/UTF-8
Bits Last Code Point Octet 1 Octet 2 Octet 3 Octet 4
7 U+007F 0xxxxxxx -/- -/- -/-
11 U+07FF 110xxxxx 10xxxxxx -/- -/-
16 U+FFFF 1110xxxx 10xxxxxx 10xxxxxx -/-
21 U+10FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
Я не говорю по php, но я вполне уверен, что можно найти существующий код, который использует показанные битовые маски для сканирования последовательности символов utf-8, фактически не интерпретируя ее