iconv_mime_encode是否确认已设置的编码


Does iconv_mime_encode acknowledge already set encodings?

我在获取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?=

当我想要iso-8859-1时,结果是utf8。

$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错误?

正如您在手册中所读到的,iconv_mime_encode中输出字符集的默认值是iconv.internal_encoding,而不是iconv.output_encoding

output charset string指定用于组成MIME标头的字符集。iconv.internal_编码UTF-8

BTW:在PHP 5.6

中,所有3个设置都被弃用

这看起来非常错误,但有文档记录:如果不在preferences数组中设置output-encoding,它将返回到iconv.internal_encoding,而不是iconv.output_encoding

纵观iconv函数,它们似乎都使用内部编码作为回退值;似乎没有一个使用输出编码。

顺便说一句,从PHP 5.6开始,所有iconv.*_encoding设置都已弃用,default_charset设置将被用作默认设置。

我本可以再次阅读文档,但我仍然会误读默认输出编码基于内部的部分。

谢谢。