Внутренняя кодировка PHP

Согласно 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?

Solutions Collecting From Web of "Внутренняя кодировка PHP"

Это совсем не странно. Ваша первая проверка – это то, что находится между кавычками. Я предполагаю, что вы сохранили файл, используя UTF-8, что означает, что у вас есть два байта в вашей строке. Это не означает, что внутренняя кодировка – это UTF-8, просто у вас есть эти два байта в вашей строке.

Это значение по умолчанию в 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;