Iconv get encoding: примеры (PHP)
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 из модуля mbstring служит для получения или установки внутренней кодировки скрипта. Использование предпочтительно при работе с многобайтовыми кодировками, например UTF-8.
Функция iconv_set_encoding устанавливает значения параметров, которые затем можно получить с помощью iconv_get_encoding. Эти функции работают в паре.
Некоторые настройки iconv доступны через ini_get('iconv.input_encoding'), но этот метод менее гибкий по сравнению с iconv_get_encoding.
Аналоги в других языках программирования
Iconv get encoding в Python
В Python модуль locale предоставляет функцию locale.getpreferredencoding() для получения текущей кодировки.
import locale
print(locale.getpreferredencoding())UTF-8
В 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 приводит к возврату false.
<?
$result = iconv_get_encoding('unknown_encoding');
var_dump($result);
?>bool(false)
При отсутствии модуля 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, поскольку она была удалена.
Расширенные примеры
<?
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');
?><?
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
)<?
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'));
?>