„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > PHP: Multibytes

PHP: Multibytes

Veröffentlicht am 18.08.2024
Durchsuche:389

PHP: Going multibytes

Multibyte-Zeichen können bei der Programmierung schwierig sein.

Warnung

mbstring ist standardmäßig nicht aktiviert. Stellen Sie sicher, dass Sie diesen Teil vorher gelesen haben.

Warum sich mit Multibyte-Strings beschäftigen?

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.

Warum benötigen einige Zeichen mehrere Bytes?

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!).

Ein paar Beispiele

Zeichen zählen

$strings = [
    "?????",
    "チャーミング",
    "González",
];

foreach ($strings as $string) {
    echo 'strlen:' . strlen($string) . ' vs. mb_strlen:' . mb_strlen($string) . PHP_EOL;
}

Position finden

echo strpos("チャーミング", "ャ"); // gives 3
echo mb_strpos("チャーミング", "ャ"); // gives 1 because 1st position is 0

Schnur durchschneiden

echo substr("チャーミング", 3) . PHP_EOL;// ャーミング
echo mb_substr("チャーミング", 3);// ミング

Auswirkungen auf die Leistung

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; $i 



Quelle: 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.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/spo0q/php-going-multibytes-3b3b?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

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