Согласно 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?
Это совсем не странно. Ваша первая проверка – это то, что находится между кавычками. Я предполагаю, что вы сохранили файл, используя 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;