我在获取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
这看起来非常错误,但有文档记录:如果不在preferences
数组中设置output-encoding
,它将返回到iconv.internal_encoding
,而不是iconv.output_encoding
。
纵观iconv
函数,它们似乎都使用内部编码作为回退值;似乎没有一个使用输出编码。
顺便说一句,从PHP 5.6开始,所有iconv.*_encoding
设置都已弃用,default_charset
设置将被用作默认设置。
我本可以再次阅读文档,但我仍然会误读默认输出编码基于内部的部分。
谢谢。