У меня проблемы с получением iconv_mime_encode для использования уже установленных кодировок.
iconv_set_encoding('internal_encoding', 'utf-8');
iconv_set_encoding('input_encoding', 'utf-8');
iconv_set_encoding('output_encoding', 'iso-8859-1');
$string = "hétérogène";
$a_prefs = array(
'scheme' => 'Q',
'line-length' => 500);
echo iconv_mime_encode('Subject', $string, $a_prefs);
-> Subject: =?utf-8?Q?h=C3=A9t=C3=A9rog=C3=A8ne?=
Результат был utf8, когда я хотел iso-8859-1.
$a_prefs = array(
'scheme' => 'Q',
'line-length' => 500,
'output-encoding' => 'iso-8859-1');
echo iconv_mime_encode('Subject', $string, $a_prefs);
-> Subject: =?iso-8859-1?Q?h=E9t=E9rog=E8ne?=
Здесь результат в порядке, но я подумал, что не нужно явно задавать кодировку вывода.
Я не прав или это ошибка php?
Это выглядит очень неправильно, но это задокументировано: Если вы не установите output-encoding
в preferences
массив, он возвращается к iconv.internal_encoding
, вместо iconv.output_encoding
,
Глядя через iconv
функции, похоже, что все они используют внутреннюю кодировку в качестве запасного значения; ни один из них не использует выходную кодировку.
Кстати, с PHP 5.6 все iconv.*_encoding
настройки устарели, default_charset
вместо этого будет использоваться настройка по умолчанию.
Как вы можете прочитайте в руководстве, по умолчанию для выходной кодировки в iconv_mime_encode
является iconv.internal_encoding
не iconv.output_encoding
,
output-charset string Указывает набор символов, который будет использоваться для составления заголовка MIME. iconv.internal_encoding UTF-8
КСТАТИ: все 3 настройки осуждается в PHP 5.6
Я мог бы прочитать документацию еще раз, но я бы все равно неправильно прочитал ту часть, в которой выходная кодировка по умолчанию основана на внутреннем коде.
Спасибо.