Heim > Backend-Entwicklung > PHP-Tutorial > Warum werden preg_match()-Offsets in Bytes und nicht in Zeichen angegeben, selbst mit UTF-8-Unterstützung?

Warum werden preg_match()-Offsets in Bytes und nicht in Zeichen angegeben, selbst mit UTF-8-Unterstützung?

DDD
Freigeben: 2024-12-06 05:35:19
Original
176 Leute haben es durchsucht

Why are preg_match() Offsets in Bytes, Not Characters, Even with UTF-8 Support?

PREG_OFFSET_CAPTURE und UTF-8-Strings: Eine Byte-Zählungsinkongruenz

Beim Abgleichen von UTF-8-Strings mithilfe von preg_match() mit dem PREG_OFFSET_CAPTURE-Parameter können Benutzer auf ein unerwartetes Problem stoßen Verhalten, bei dem Offsets in Bytes statt in Zeichen gezählt werden. Trotz der Verwendung des u-Modifikators, der UTF-8-Unterstützung sowohl für das Muster als auch für den Betreff ermöglicht, bleiben erfasste Offsets bytebasiert.

Behebung des Byte-Zählproblems

Um diese Diskrepanz zu beheben und zu erhalten Bei zeichenbasierten Offsets kann ein Workaround mit mb_strlen eingesetzt werden. Diese Funktion stellt die UTF-8-Zeichenanzahl für eine angegebene Teilzeichenfolge bereit. Durch die Verwendung von mb_strlen für die Teilzeichenfolge der Betreffzeichenfolge vor der erfassten Übereinstimmung können wir den genauen Zeichenversatz ermitteln.

Hier ist ein modifiziertes Beispiel:

$str = "\xC2\xA1Hola!";
preg_match('/H/u', $str, $a_matches, PREG_OFFSET_CAPTURE);
echo mb_strlen(substr($str, 0, $a_matches[0][1])); // Outputs 1
Nach dem Login kopieren

Durch die Einbindung von mb_strlen stellen wir dies sicher Offsets stellen Zeichenpositionen innerhalb der UTF-8-Zeichenfolge dar und liefern ein präzises und erwartetes Ergebnis.

Das obige ist der detaillierte Inhalt vonWarum werden preg_match()-Offsets in Bytes und nicht in Zeichen angegeben, selbst mit UTF-8-Unterstützung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage