PHP UTF-8 Fragen - Wenn ich einen string in PHP... ist es in UTF-8?
In PHP, wenn ich einen string wie diesen:
$str = "bla bla, hier ist meine Zeichenkette";
Werde ich dann in der Lage sein zu verwenden, solange die mbstring-Funktionen, um auf die Strings als UTF8?
//Wird das funktionieren? $str = mb_strlen($str);
Weiter, wenn ich dann eine andere Zeichenfolge, dass ich wissen ist UTF-8 (sagen, es war eine Geschrieben form-Wert oder ein UTF-8 string, der aus einer Datenbank), kann ich dann verketten diese beiden und keine Probleme haben?
//Was ist mit dieser, werden Sie diese Arbeit? $str = $str . $utf8_string_from_database;
InformationsquelleAutor Keith Palmer Jr. | 2009-02-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ersten Frage: es hängt davon ab, was genau geht in der Zeichenfolge.
In PHP (bis zu PHP5, sowieso), strings sind nur Sequenzen von bytes. Es gibt keine implizite oder explizite Zeichen setzen, verbunden mit Ihnen; das ist etwas, was der Programmierer muss verfolgen. Also, wenn Sie setzen nur gültige UTF-8-bytes zwischen den Anführungszeichen (ziemlich einfach, wenn die Datei selbst als UTF-8 kodiert), dann wird die Zeichenfolge im UTF-8, und Sie können sicher mit mb_strlen() auf.
Auch, wenn Sie mit den mbstring-Funktionen, die Sie benötigen, um explizit zu sagen, welche Charakter-string ist, entweder mit mbstring.internal_encoding oder als letztes argument jeder Funktion mbstring.
Zweiten Frage: ja, mit Einschränkungen.
Zwei strings, die beide unabhängig voneinander gültige UTF-8-sicher sein kann byte-Weise verkettet (wie mit der PHP -
.
Betreiber) und noch gültig UTF-8. Jedoch können Sie nie sicher sein, ohne dabei einige arbeiten selbst, dass eine Gebuchte string gültiges UTF-8. Datenbank strings sind ein wenig leichter, wenn Sie sorgfältig legen Sie die Verbindung Zeichensatzes, da die meisten DBMS wird jede Konvertierung für Sie.InformationsquelleAutor chazomaticus
Wenn Ihr Quelltext ist in UTF-8, dann wird der string in UTF-8, wenn nicht — es ist nicht. Seit deinem Beispiel-string ist nur in Englisch, es ist gültiges UTF-8.
PHP nicht selbst wissen, über charsets. Wenn du an Sachen zu mb* Funktion, er behandelt es als einen UTF-8 string.
Verkettung muss funktionieren, egal was, wenn ich verstehe, UTF-8 richtig 🙂 Nur sicherstellen, dass beide strings sind UTF-8, sonst erhalten Sie seltsam string als Ergebnis.
InformationsquelleAutor Ilya Birman
Stellen Sie sicher, dass Ihre default_charset Richtlinie ist auf UTF-8 eingestellt, bevor dieser Ausführung tritt.
Ändern Sie entweder die php.ini direkt, oder tun Sie es zur Laufzeit mit
Es tut mehr als das. Versuchen Sie es ausführen urldecode('%C3%A9') mit einem default_charset ISO-8859-1 und dann wieder mit einem default_charset UTF-8. Aber Sie sind richtig, es hat keinen Einfluss darauf, wie PHP behandelt Zeichenketten auf die bit-Ebene.
Der EINZIGE Grund, würden Sie sehen, unterschiedliche Ergebnisse aus, dass ist weil Ihr browser interpretiert diese bytes unterschiedlich. Wie ich schon sagte, es wirkt NICHTS darüber aus, wie PHP eigentlich Griffe, Streicher, was auch immer.
Ich meine nicht zu starten, hier ein argument, aber ich denke, Sie sind nicht mein Punkt. Ich spreche darüber, wie die Zeichenfolge "%C3%A9" kann interpretiert werden als eine einzelne 2-byte-Sequenz, oder zwei 1-byte-Sequenzen. Dieses Problem besteht mit oder ohne browser, aber das ist sicherlich, wo es geschieht, die meisten.
Die Frage war darüber, wie Sie PHP selbst verarbeitet Sequenzen von bytes. Einstellung default_charset hat keinen Einfluss mehr auf das Verhalten von PHP verarbeitet Sequenzen von bytes. Ich denke, wir beide einig.
InformationsquelleAutor Peter Bailey