PHPで文字エンコーディングを理解するのに苦労しています。私はそのUnicodeコードポイントで表され、実際に€文字、文字列を、持っているPHPで文字エンコーディングを理解する
$string = "\xe2\x82\xac";
var_dump(mb_internal_encoding());
var_dump($string);
var_dump(unpack('C*', $string));
$utf8string = mb_convert_encoding($string, "UTF-8");
var_dump($utf8string);
var_dump(unpack('C*', $utf8string));
mb_internal_encoding("UTF-8");
var_dump($string);
var_dump($utf8string);
:
は、次のスクリプトを(あなたがhereそれを実行することができます)考えてみましょう。 PHP 5.5
までは、使用される内部エンコーディングはISO-8859-1
です。したがって、このエンコーディングを使用して文字列をエンコードすると思います。 unpack
で私の文字列のバイト表現を見ることができ、それは文字列を定義するために使用する16進コードに対応しています。
次に、文字列のエンコーディングを、に変換します。mb_convert_encoding
を使用します。この時点で、文字列は画面上で異なって表示され、そのバイト表現は変更されます(これは予想されます)。
にPHP
内部エンコーディングを変更すると、utf8string
が画面に正しく表示されると思われますが、これは起こりません。
私には何が欠けていますか?
ブラウザでこれを実行していますか?それは文字エンコーディングについて独自の選択を行い、問題のキャラクターをエスケープするエンティティの方がよいでしょう。 – Chris
は、ブラウザでも)(PHPのすべての文字列はバイナリ文字列として扱われ、 'mb_internal_encodingれUTF8 – RiggsFolly
を期待している'文字通り他に何も影響しないことを確認するために '
'に '' <メタ文字セットが=「UTF8」>を追加します。他の 'mb_ *'関数がどのように機能するかよりも重要です。同じ文書内でISO-8859とUTF8の両方を出力することはできず、どのプログラムが出力を生成しているかにかかわらず何事も起こらないことを期待します。 – Sammitch