Posts Tagged ‘юникод’

Сегодня, идя домой, я пришел к выводу, что использовать костыли в виде iconv при работе с многобайтовыми кодировками — бред. Ведь существует очевидная догма, что любой код на PHP работает медленнее, чем аналогичный в виде модуля для PHP на C. То есть, лучше для работы с юникодом и прочей многобайтовой бурдой (UTF-8 — не бурда!!!) использовать модули.

Вспомнил, что как-то PhpMyAdmin ругался на отсутствие некого модуля ‘mbstring‘. Я, конечно, поставил его (вроде бы через pecl), но вкуривать, что это такое, не стал. А зря.

Расшифровывается то название модуля как раз так, как надо — Multi Byte String. То есть, модуль обеспечивает корректную работу со строками из многобайтовых кодировок (в моем случае это UTF-8).

Что же нам остается? А только одно — курить ссылку: http://php.net/mbstring. В этом модуле и конкатенация, и регулярные выражения. Там есть все, что нужно. Ну и не забудте поставить модуль (для Debian нужен дополнительно пакет php5-dev, а лучше скомпилировать руками).

Банзай!

Реклама

Решил порыться в том, с чем сталкивался пол-года назад. Вот например: берем из базы MySQL строку, и обрезаем ее до фиксированного кол-ва сиволов n. Все происходит в кодировке UTF-8. После урезки строки в конце появляется непонятный символ. Как убрать?

Итак, кириллица в UTF8 — достаточно двухбайтная :). И substr, в частности, обрезает симолвы непонятным нам образом (на самом деле, понятным, но не до конца).

Пол года назад я принял ламерское решение — укорчаивать строки в кодировке CP1251 и потом возвращаться в UTF8 готовую строку, если требуется. То есть что-то вроде:

echo iconvWINDOWS-1251«, «UTF-8«, substr(iconvUTF-8«, «WINDOWS-1251«, $string, 0, 40));

Думаю, разъяснять, что и как, не стоит. На такое мой мозг был способен пол года назад. Когда у меня перестанут появляться абсолютно идиотские решения (фактически, костыли)… я не знаю. 🙂