Frage

Diese letzten paar Tage, die ich gearbeitet habe meine PHP-Code-Basis von latin1 auf UTF-8 in Richtung umzuwandeln. Ich habe die beiden wichtigsten Lösungen lesen sind entweder die einzelnen Byte-Funktionen mit dem in multibyte Funktionen eingebaut ersetzen oder den mbstring.func_overload Wert in der php.ini-Datei festgelegt.

Aber dann kam ich auf diesen Thread auf Stack-Überlauf, in dem der Beitrag von thomasrutter scheint um anzuzeigen, dass die Multibyte-Funktionen für UTF-8 nicht wirklich notwendig sind, solange das Skript und Stringliterale in UTF-8 codiert sind.

Ich habe gefunden, keine andere Beweise, ob dies wahr ist oder nicht, und wenn sich herausstellt, brauche ich nicht meinen Code zu den mb_functions konvertieren dann, dass eine echte Zeitersparnis wäre! Wer in der Lage, etwas Licht in diesen Schuppen?

War es hilfreich?

Lösung

Soweit ich das Problem verstehen, solange alle Ihre Daten zu 100% in utf-8 ist - und dass Mittel Benutzereingabe, die Datenbank und auch die Codierung der PHP-Dateien selbst wenn Sie in ihnen Sonderzeichen - dies ist true true für Such- und Vergleichsoperationen . Wie @ntd weist darauf hin, wird ein nicht-multibyte strlen () falsche Ergebnisse, wenn sie auf eine Zeichenfolge ausführen, die Multibyte-Zeichen enthält.

THis ist ein großer Artikel über die Grundlagen der Codierung.

Andere Tipps

Sie sind nicht „notwendig“, wenn Sie einen der verwenden Funktionen, die sie ersetzen (und es ist wahrscheinlich, dass Sie sind mindestens eine dieser verwendet wird) oder auf andere Weise müssen explizit ein Merkmal der Erweiterung wie HTTP Umgang .

Wenn auf UTF-8 Compliance arbeiten, falle ich immer auf die PHP UTF-8-Spickzettel mit einer Ergänzung: PCRE Muster aktualisiert werden müssen, den u Modifikator verwenden

.

Sobald Sie die Prüfung oder einen Multibyte-String ändern, müssen Sie * Funktion ein mb_ verwenden. Ein sehr kurzes Beispiel, das zeigt, warum:

$str = "abcžđščćöçefg";
mb_internal_encoding("UTF-8");

echo "strlen: ".strlen($str)."\n";
echo "mb_strlen: ".mb_strlen($str)."\n";

Diese druckt:

strlen: 20
mb_strlen: 13

thomasrutter, dass die zeigt suchen braucht keine besondere Behandlung. Zum Beispiel, wenn Sie die Länge eines UTF8-String überprüfen müssen, sehe ich nicht, wie Sie das mit Normalpapier strlen() tun können.

Funktionen wie mb_strtoupper kann notwendig sein, auch. strtoupper nicht konvertiert A auf A.

Es gibt eine Reihe von Funktionen, die Strings erwarten einziges Byte sein (und einige sogar davon aus, dass es iso-8859-1 ist). In diesen Fällen müssen Sie sich bewusst sein, was Sie tun und eventuell Ersatz-Funktionen zu verwenden. Es ist eine ziemlich umfassende Liste an: http://www.phpwact.org/php/ i18n / utf-8

Sie könnten die mbfunctions Bibliothek verwenden, die die Multibyte-Funktionen in PHP erweitert:

http://code.google.com/p/mbfunctions/

Sie können diese verwenden http://php.net/manual/en/mbstring.overload.php in php.ini Einstellung, so dass Sie Sie Code nicht ändern müssen.

Aber seien Sie vorsichtig, da nicht alle String-Funktion automatisch geändert wird. Dies ist eines: http://php.net/manual/en/function. substr-replace.php

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top