12.9. Кодирование с учетом кодировки
Исторически сложилось так, что в компьютерах текстовые данные представлялись в виде символьных строк. Каждый символ является одним байтом, который позволяет хранить до 256 различных символов. Это более чем достаточно для английского языка и охватывает почти все европейские языки. Азиатские языки никак не укладываются в рамки 256 символов. Для того чтобы вместить более широкий диапазон символов, было найдено решение - мультибайтовая кодировка. В таких кодировках для отображения одного визуального символа вместо одного байта используется несколько байтов.
Сценарии PHP написаны в стандартной однобайтовой кодировке ASCII, но существует возможность включать в сценарий строки мультибайтового текста. К сожалению, функции манипулирования текстами языка PHP предполагают работу с однобитовыми кодировками. Строка, кодированная с использованием двух байтов на символ, для функции strlen оказывается вдвое длиннее, чем при отображении. Решением является расширение, позволяющее работать с мультибайтовыми строками.
Мультибайтовую поддержку в PHP добавили Рю Хирокава (Rui Hirokawa) и Цукада Такуя (Tsukada Takuya). 
string iconv(string from, string to, string text)
Функция iconv (листинг 12.86) преобразует строку из одной кодировки в другую. Эта функция становится доступной при наличии расширения iconv, которое включает также дескриптор буфера вывода (см. главу 8, "Браузер ввода-вывода").

Листинг 12.86. Функция iconv

<?php
print(iconv("ISO-88 59-1","ISO-8 859-15", "Core PHP Programming"));
?>

string mb_convert_case(string text, integer mode, string encoding)
Функция mb_convert_case (листинг 12.87) предназначена для замены регистра букв строки, переданной аргументом text. При этом используются режимы, описанные в табл. 12.11. Необязательный аргумент encoding отменяет стандартную кодировку.
В отличие от привычных функций наподобие strtolower эта функция "понимает", как меняется регистр букв с диакритическими знаками. Кроме того, можно воспользоваться функциями mb_strtolower и mb_strtoupper.
Кодирование и декодирование
j Листинг 12.87. Функция mb_convert_case_
<?php
$text = "Jedes Jahr PHP gewinnt GroBere Popularitat!"; print(mb_convert_case($text, MB_CASE_LOWER) . '<br>'); print(mb_convert_case($text, MB_CASE_TITLE) . '<br>'); print(mb_convert_case($text, MB_CASE_UPPER) . '<br>');
?>

string mb_convert_encoding(string text, string target, array source)
Функция mb_convert_encoding преобразует строку из одной кодировки в другую. Необязательный третий аргумент по умолчанию задает внутреннюю кодировку PHP. С другой стороны, в этом аргументе можно задать один или несколько идентификаторов кодов, разделенных запятыми. В качестве общей ссылки на кодировки ASCII, JIS, UTF-8, EUC-JP и SJIS можно задавать аргумент auto. Кроме того, эта функция позволяет в качестве аргумента source задавать массив. string mb_convert_kana(string text, string option, array encoding)
Функция mb_convert_kana транслирует японские тексты между различными ал­фавитами, используемыми в японском языке. Процессом трансляции управляет аргумент option. Возможные варианты приведены в табл. 12.12. По умолчанию этот параметр равен KV. Необязательный аргумент source устанавливает кодировку, использованную с исходным текстом. По умолчанию устанавливает кодировка, принятая PHP по умолчанию.
Кодирование и декодирование