Отправляет email-рассылки с помощью сервиса Sendsay

Килограмм килобайтов

  Все выпуски  

Килограмм килобайтов


Килограмм килобайтов

Сайт рассылки: Smarty IT Выпуск №60, 2010-01-13
Блог рассылки в Живом Журнале
"Следуйте за моим твитом..."
Статьи
 
СУБД Oracle
Общие вопросы программирования
WEB-программирование
Java-программирование

Здравствуйте, уважаемые подписчики.

Предлагаю Вашему вниманию мою статью о работе с многобайтными кодировками

Сложности с многобайтными кодировками в PHP

v:1.0 11.01.2010

Справедливости ради, надо отметить, что обработка строк в многобайтовой кодировке может оказаться не простой задачей во многих языках программирования (например Oracle PL/SQL), а не только в PHP.

Типичным примером такой кодировки является utf-8 (utf8) , эта кодировка становится очень популярной в Web-программировании поэтому рассмотрим именно ее.

Многобайтная кодировка так называется, потому что один символ (буква) кодируется не одним байтом, а несколькими (в случае с utf8 -двумя).
Именно эта особенность и является корнем проблемы обработки строк.

Рассмотрим пример.
В кодировке utf8 у нас есть строка "Тестовая строка".
Мы хотим взять первые четыре символа(буквы) этой строки, для этого используем PHP-функцию substr.
Получаем такой код:



В результате получим:



Т.е. только два симвала (буквы). Это происходит, потому что PHP-функция substr работает не с симвалами и байтами, и она честно берет первые четыре байта строки, а поскольку в utf8 один символ - это два байта, вот и получается в результате две буквы вместо четырех.

Еще более интересные эффекты могут получиться, если пытаться выкусывать нечетное количество символов, тогда вместо последней буквы будет какой-нибудь непонятный символ.

Для работы с многобайтными кодировками, и utf8 в том числе, в PHP есть специальные функции, например в нашем случае корректный код будет таким:



В результате получаем:



Т.е. то, что надо.
Используются две функции, первая устанавливает кодировку, вторая выполняет преобразование.

PHP предлагает целую группу функций для работы с многобайтными кодировками, большинство из них легко узнать по приставке mb_.

Петрелевич Сергей
petrelevich@yandex.ru
www.SmartyIT.ru

Обсудить статью в ЖЖ

Ведущий рассылки: Петрелевич Сергей


В избранное