5

根据 bin2hex,我的 PHP 在内部使用 UTF-8:

echo bin2hex("ö"); -> c3b6 (utf-8)
echo bin2hex(utf8_decode("ö")); -> f6 (ISO-8859)

但是 mb_internal_encoding() 和 iconv_get_encoding() 都说它是 ISO-8859-1。

echo mb_internal_encoding(); -> ISO-8859-1
var_dump(iconv_get_encoding()); ->  ["input_encoding"]=>  string(10) "ISO-8859-1"  ["output_encoding"]=>  string(10) "ISO-8859-1"  ["internal_encoding"]=>  string(10) "ISO-8859-1"

UTF-8 似乎显然是它正在使用的那个,但为什么它仍然显示 ISO-8859-1?

4

2 回答 2

7

这一点也不奇怪。您的第一个检查是引号之间的内容。我假设您已经使用 UTF-8保存了文件,这意味着您的字符串中有两个字节。这并不意味着内部编码是 UTF-8,只是你的字符串中有这两个字节。

于 2012-10-03T14:42:40.063 回答
4

这是php.ini中的默认设置:

[iconv]
;iconv.input_encoding = ISO-8859-1
;iconv.internal_encoding = ISO-8859-1
;iconv.output_encoding = ISO-8859-1

如果你想在任何地方使用 UTF-8,你应该使用这些设置:

default_charset = "UTF-8"

[iconv]
iconv.input_encoding = UTF-8
iconv.internal_encoding = UTF-8
iconv.output_encoding = UTF-8

[mbstring]
mbstring.language = Neutral
mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
mbstring.http_output = UTF-8
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none;
于 2012-10-03T14:43:22.957 回答