5

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 が表示されるのはなぜですか?

4

2 に答える 2

7

これはまったく不思議なことではありません。最初のチェックは、引用符の間にあるものです。UTF-8 を使用してファイルを保存したと仮定します。これは、文字列に 2 バイトがあることを意味します。これは、内部エンコーディングが UTF-8 であることを意味するのではなく、文字列にこれらの 2 バイトが含まれていることを意味します。

于 2012-10-03T14:42:40.063 に答える
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;
于 2012-10-03T14:43:22.957 に答える