Iconv: примеры (PHP)
iconv(string $from_encoding, string $to_encoding, string $string): string|falseФункция iconv в PHP
Функция iconv предназначена для преобразования строк между различными кодировками символов. Она используется при необходимости изменить кодировку текстовых данных, например при обработке файлов, получении информации из внешних источников или подготовке данных для разных систем.
Функция имеет три параметра:
- from_encoding - исходная кодировка строки.
- to_encoding - целевая кодировка для преобразования.
- string - строка, которую требуется преобразовать.
Функция возвращает преобразованную строку или false при ошибке.
Примеры использования iconv
Преобразование из Windows-1251 в UTF-8:
echo iconv('Windows-1251', 'UTF-8', 'Привет, мир!');Привет, мир!
Использование суффикса //IGNORE:
$str = iconv('UTF-8', 'ASCII//IGNORE', 'Hello © World');
echo $str;Hello World
Преобразование с транслитерацией:
echo iconv('UTF-8', 'ASCII//TRANSLIT', 'Café München');Cafe Munchen
Альтернативные функции в PHP
Функция mb_convert_encoding из расширения Multibyte String предоставляет аналогичные возможности, но с более широкой поддержкой многобайтовых кодировок. Рекомендуется для работы с Unicode и сложными кодировками.
Класс UConverter доступен при включенном модуле intl. Он обеспечивает более точный контроль над процессом преобразования и поддерживает дополнительные алгоритмы.
Функции utf8_encode и utf8_decode работают только с ISO-8859-1 и UTF-8. Они устарели в PHP 8.2.
Аналоги в других языках
Iconv в Python
Используется метод encode/decode строк:
text = 'Привет'.encode('cp1251').decode('utf-8')Iconv в Javascript
В браузере применяется TextDecoder и TextEncoder:
let decoder = new TextDecoder('windows-1251');
let data = decoder.decode(byteArray);Iconv в MySQL
Используются функции CONVERT и CAST:
SELECT CONVERT(column_name USING utf8) FROM table;Iconv в Java
Класс Charset предоставляет методы для преобразования:
String str = new String(bytes, "CP1251");Типичные ошибки
При указании неизвестной кодировки функция возвращает false:
$result = iconv('UNKNOWN', 'UTF-8', 'text');
var_dump($result);bool(false)
Без флагов IGNORE или TRANSLIT может возникнуть ошибка:
echo iconv('UTF-8', 'ASCII', 'Café');Notice: iconv(): Detected an illegal character...
Указание параметров в неверном порядке приводит к некорректным результатам:
echo iconv('Привет', 'UTF-8', 'Windows-1251');Пустая строка или мусорные символы
Изменения в новых версиях PHP
Удалена поддержка суффикса //IGNORE//TRANSLIT. Теперь необходимо использовать только один суффикс.
Добавлена поддержка суффиксов //IGNORE и //TRANSLIT в параметре to_encoding.
Улучшена обработка ошибок. Функция теперь выдает ошибку уровня E_NOTICE при невозможности преобразовать символ.
Расширенные примеры
Чтение файла в кодировке Windows-1251 и преобразование в UTF-8:
$file = fopen('file.txt', 'r');
while ($line = fgets($file)) {
echo iconv('Windows-1251', 'UTF-8//IGNORE', $line);
}
fclose($file);Обработка нескольких строк в массиве:
$data = ['Текст 1', 'Текст 2'];
$converted = array_map(function($item) {
return iconv('UTF-8', 'CP1251', $item);
}, $data);
print_r($converted);Генерация URL-адреса из кириллического заголовка:
$title = 'Новости компании';
$slug = iconv('UTF-8', 'ASCII//TRANSLIT', $title);
$slug = strtolower(preg_replace('/[^A-Za-z0-9-]+/', '-', $slug));
echo $slug;novosti-kompanii
Преобразование перед кодированием:
$text = 'Специальный текст';
$encoded = base64_encode(iconv('UTF-8', 'CP1251', $text));
echo $encoded;