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

Работа с iconv_get_encoding: получение параметров преобразования строк
Раздел: Кодировки символов
iconv_get_encoding(string $type = "all"): array|string|false

Основы функции iconv_get_encoding

Функция iconv_get_encoding в PHP возвращает текущие настройки преобразования кодировок для модуля iconv. Использование происходит при необходимости узнать или проверить параметры, которые применяются функциями iconv и ob_iconv_handler во время выполнения скрипта.

Аргументы функции

Функция принимает один необязательный аргумент:

  • type (string) – определяет, какой именно параметр требуется получить. Может принимать значения:
    • 'input_encoding' – кодировка входной строки по умолчанию.
    • 'output_encoding' – кодировка выходной строки по умолчанию.
    • 'internal_encoding' – внутренняя кодировка скрипта.
    • Если аргумент не указан или равен 'all', функция возвращает ассоциативный массив со всеми текущими настройками.

Краткие примеры использования

Получение всех настроек
<?
// Получение всех текущих настроек iconv
$allEncodings = iconv_get_encoding();
print_r($allEncodings);
?>
Array
(
    [input_encoding] => ISO-8859-1
    [output_encoding] => ISO-8859-1
    [internal_encoding] => ISO-8859-1
)
Получение конкретной настройки
<?
// Получение только внутренней кодировки
$internal = iconv_get_encoding('internal_encoding');
echo $internal;
?>
ISO-8859-1
Использование после изменения настроек
<?
iconv_set_encoding('input_encoding', 'UTF-8');
iconv_set_encoding('output_encoding', 'CP1251');

$current = iconv_get_encoding('input_encoding');
echo 'Текущая входная кодировка: ' . $current;
?>
Текущая входная кодировка: UTF-8

Похожие функции в PHP

mb_internal_encoding

Функция mb_internal_encoding из модуля mbstring служит для получения или установки внутренней кодировки скрипта. Использование предпочтительно при работе с многобайтовыми кодировками, например UTF-8.

Функция iconv_set_encoding устанавливает значения параметров, которые затем можно получить с помощью iconv_get_encoding. Эти функции работают в паре.

ini_get

Некоторые настройки iconv доступны через ini_get('iconv.input_encoding'), но этот метод менее гибкий по сравнению с iconv_get_encoding.

Аналоги в других языках программирования

Iconv get encoding в Python

В Python модуль locale предоставляет функцию locale.getpreferredencoding() для получения текущей кодировки.

import locale
print(locale.getpreferredencoding())
UTF-8
JavaScript (Node.js)

В Node.js кодировка по умолчанию обычно UTF-8. Параметры преобразования задаются в методах Buffer.

const buf = Buffer.from('тест', 'utf8');
console.log(buf.toString('win1251'));

Iconv get encoding в MySQL

В MySQL для получения кодировок соединения и таблиц используются запросы к системным переменным.

SHOW VARIABLES LIKE 'character_set_client';

Типичные ошибки

Неверный параметр type

Передача недопустимого значения аргументу type приводит к возврату false.

<?
$result = iconv_get_encoding('unknown_encoding');
var_dump($result);
?>
bool(false)
Использование без модуля iconv

При отсутствии модуля iconv функция недоступна.

<?
// Если модуль iconv не загружен
if (!function_exists('iconv_get_encoding')) {
    echo 'Функция недоступна';
}
?>
Ошибочное толкование возвращаемых значений

Функция возвращает строку или массив, но не изменяет кодировку строк напрямую.

Изменения в версиях PHP

В PHP 5.6.0 значение по умолчанию для настроек iconv было изменено с ISO-8859-1 на UTF-8. Это влияет на возвращаемые значения функции iconv_get_encoding(), если настройки не изменялись явно.

Начиная с PHP 8.0.0, функция больше не зависит от конфигурационной директивы iconv.input_encoding, поскольку она была удалена.

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

Валидация настроек перед преобразованием
Пример php
<?
function safeIconvConvert($str, $from, $to) {
    $currentInput = iconv_get_encoding('input_encoding');
    iconv_set_encoding('input_encoding', $from);
    iconv_set_encoding('output_encoding', $to);
    
    $result = iconv($from, $to . '//IGNORE', $str);
    
    // Восстановление исходных настроек
    iconv_set_encoding('input_encoding', $currentInput);
    
    return $result;
}

$text = 'Пример текста';
echo safeIconvConvert($text, 'UTF-8', 'CP1251');
?>
Мониторинг изменений настроек
Пример php
<?
class EncodingMonitor {
    private $initialEncodings;
    
    public function __construct() {
        $this->initialEncodings = iconv_get_encoding();
    }
    
    public function checkChanges() {
        $current = iconv_get_encoding();
        return array_diff_assoc($current, $this->initialEncodings);
    }
}

$monitor = new EncodingMonitor();
iconv_set_encoding('internal_encoding', 'Windows-1251');
print_r($monitor->checkChanges());
?>
Array
(
    [internal_encoding] => Windows-1251
)
Интеграция с выходной буферизацией
Пример php
<?
iconv_set_encoding('internal_encoding', 'UTF-8');
iconv_set_encoding('output_encoding', 'ISO-8859-1');

ob_start('ob_iconv_handler');
echo 'Текст в UTF-8';
$contents = ob_get_clean();

// Проверка текущих настроек после работы буфера
print_r(iconv_get_encoding('output_encoding'));
?>

PHP iconv_get_encoding function comments

En
Iconv get encoding Retrieve internal configuration variables of iconv extension