PHP internal encoding

南笙酒味 提交于 2019-12-23 09:48:58

问题


According to bin2hex my PHP is internally using UTF-8:

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

But both mb_internal_encoding() and iconv_get_encoding() say it is 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 seems to apparently be the one it's using, but why is it showing ISO-8859-1 anyway?


回答1:


This is not strange at all. Your first check is for what is between the quotes. I assume you have saved the file using UTF-8 which means you have two bytes in your string. This does not imply that the internal encoding is UTF-8, just that you have those two bytes in you string.




回答2:


This is a default setting in php.ini :

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

If you want to use UTF-8 everywhere you should use these settings :

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;


来源:https://stackoverflow.com/questions/12710842/php-internal-encoding

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!