Ich habe Schwierigkeiten, die Zeichencodierung in PHP zu verstehen.Grundlegende Zeichencodierung in PHP
Betrachten Sie das folgende Skript (Sie es here laufen kann):
$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);
Ich habe eine Zeichenfolge, tatsächlich das € Zeichen mit seinen Unicode-Codepunkte dargestellt. Bis zu PHP 5.5
ist die verwendete interne Kodierung ISO-8859-1
, daher denke ich, dass meine Zeichenfolge mit dieser Kodierung kodiert wird. Mit unpack
kann ich die Bissrepräsentation meiner Zeichenfolge sehen, und es entspricht den hexadezimalen Codes, die ich benutze, um die Zeichenfolge zu definieren.
Dann konvertiere ich die Codierung der Zeichenfolge zu UTF-8
, mit mb_convert_encoding
. Zu diesem Zeitpunkt wird die Zeichenfolge auf dem Bildschirm anders angezeigt und ihre Byte-Darstellung ändert sich (und dies wird erwartet). Wenn ich die PHP
interne Codierung auch in UTF-8
ändere, würde ich erwarten, dass utf8string
korrekt auf dem Bildschirm angezeigt wird, aber das passiert nicht.
Was ich vermisse?
Führen Sie dies in einem Browser aus?Das wird seine eigene Entscheidung über die Zeichencodierung treffen, und Sie wären besser dran, wenn die Entität den beleidigenden Charakter verlassen würde. – Chris
Fügen Sie ein '' zu dem '
' hinzu, um sicherzustellen, dass der Browser auch UTF8 erwartet. – RiggsFollyAlle Strings in PHP werden als binäre Strings behandelt, und 'mb_internal_encoding()' betrifft buchstäblich nichts anderes als wie andere 'mb_ *' Funktionen funktionieren. Sie können auch nicht sowohl ISO-8859 als auch UTF8 im selben Dokument ausgeben und erwarten, dass alles passiert, unabhängig davon, welches Programm die Ausgabe erzeugt. – Sammitch