根据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?
答案 0 :(得分:7)
这一点都不奇怪。您的第一次检查是报价之间的内容。我假设您使用UTF-8 保存文件,这意味着您的字符串中有两个字节。这并不意味着内部编码是UTF-8,只是你在字符串中有这两个字节。
答案 1 :(得分: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;