Multibyte-Zeichen können bei der Programmierung schwierig sein.
mbstring ist standardmäßig nicht aktiviert. Stellen Sie sicher, dass Sie diesen Teil vorher gelesen haben.
Ein Dokument kann Multibyte-Strings enthalten. Während PHP viele nützliche Hilfsprogramme für Strings bietet, sind diese Hilfsprogramme einfach nicht für Multibyte-Strings gedacht.
Es wird wahrscheinlich böse Bugs und andere unerwartete Fehler verursachen, insbesondere wenn Sie Zeichen zählen.
Deshalb sollten Sie stattdessen lieber Multibyte-String-Funktionen in PHP verwenden.
Außerdem werden in 8.4 (der nächsten Version von PHP zum Zeitpunkt des Schreibens) neue Multibyte-String-Funktionen wie mb_trim, mb_ltrim und mb_rtrim verfügbar sein.
Englisch verwendet den ASCII-Zeichensatz, daher benötigen Buchstaben wie r oder s nur ein Byte.
Im Gegensatz dazu verwenden einige Sprachen Zeichen, die mehr als ein Byte benötigen, zum Beispiel Han-Zeichen (es können bis zu 6 Bytes sein!).
$strings = [ "?????", "チャーミング", "González", ]; foreach ($strings as $string) { echo 'strlen:' . strlen($string) . ' vs. mb_strlen:' . mb_strlen($string) . PHP_EOL; }
echo strpos("チャーミング", "ャ"); // gives 3 echo mb_strpos("チャーミング", "ャ"); // gives 1 because 1st position is 0
echo substr("チャーミング", 3) . PHP_EOL;// ャーミング echo mb_substr("チャーミング", 3);// ミング
Vielleicht haben Sie gelesen, dass MBstring-Funktionen erhebliche Auswirkungen haben können.
Sie können es sogar mit dem folgenden Skript reproduzieren:
$cnt = 100000; $strs = [ 'empty' => '', 'short' => 'zluty kun', 'short_with_uc' => 'zluty Kun', 'long' => str_repeat('this is about 10000 chars long string', 270), 'long_with_uc' => str_repeat('this is about 10000 chars long String', 270), 'short_utf8' => 'žlutý kůň', 'short_utf8_with_uc' => 'Žlutý kŮň', ]; foreach ($strs as $k => $str) { $a1 = microtime(true); for($i=0; $iQuelle: PHP-Fehler
mb_*-Funktionen sind langsamer, aber es ist immer ein Kompromiss, und nur der Kontext sollte bestimmen, ob Sie diese Helfer verwenden oder Ihre eigenen erstellen sollten.
Wenn Sie beispielsweise $cnt = 100000; durch $cnt = 100; Im obigen Skript sind die mb_*-Helfer immer noch deutlich langsamer, aber die endgültige Auswirkung könnte in Ihrem Fall in Ordnung sein (z. B. 0,008 ms vs. 0,004 ms).
Einpacken
Sie müssen Multibytes berücksichtigen, insbesondere in einem mehrsprachigen Kontext, und PHP verfügt dafür über integrierte Helfer.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3