PHP内部编码(PHP internal encoding)

2019-09-23 10:48发布

据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?

Answer 1:

这不奇怪的。 您首先检查是什么引号之间。 我假设你已经保存使用UTF-8这意味着你必须在你的字符串两个字节的文件。 这并不意味着内部编码为UTF-8,只是你对你的字符串这两个字节。



Answer 2:

这是一个默认的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;


文章来源: PHP internal encoding
标签: php encoding