Iconv: примеры (PHP)

Преобразование строк между кодировками с помощью 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

Функция mb_convert_encoding из расширения Multibyte String предоставляет аналогичные возможности, но с более широкой поддержкой многобайтовых кодировок. Рекомендуется для работы с Unicode и сложными кодировками.

UConverter

Класс UConverter доступен при включенном модуле intl. Он обеспечивает более точный контроль над процессом преобразования и поддерживает дополнительные алгоритмы.

utf8_encode/decode

Функции 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

PHP 8.0

Удалена поддержка суффикса //IGNORE//TRANSLIT. Теперь необходимо использовать только один суффикс.

PHP 5.4

Добавлена поддержка суффиксов //IGNORE и //TRANSLIT в параметре to_encoding.

PHP 5.6

Улучшена обработка ошибок. Функция теперь выдает ошибку уровня E_NOTICE при невозможности преобразовать символ.

Расширенные примеры

Обработка файла построчно

Чтение файла в кодировке Windows-1251 и преобразование в UTF-8:

Пример php
$file = fopen('file.txt', 'r');
while ($line = fgets($file)) {
    echo iconv('Windows-1251', 'UTF-8//IGNORE', $line);
}
fclose($file);
Массовое преобразование массива

Обработка нескольких строк в массиве:

Пример php
$data = ['Текст 1', 'Текст 2'];
$converted = array_map(function($item) {
    return iconv('UTF-8', 'CP1251', $item);
}, $data);
print_r($converted);
Создание транслитерированной версии

Генерация URL-адреса из кириллического заголовка:

Пример php
$title = 'Новости компании';
$slug = iconv('UTF-8', 'ASCII//TRANSLIT', $title);
$slug = strtolower(preg_replace('/[^A-Za-z0-9-]+/', '-', $slug));
echo $slug;
novosti-kompanii
Работа с Base64

Преобразование перед кодированием:

Пример php
$text = 'Специальный текст';
$encoded = base64_encode(iconv('UTF-8', 'CP1251', $text));
echo $encoded;

PHP iconv function comments

En
Iconv Convert string to requested character encoding