Heim > Backend-Entwicklung > PHP-Tutorial > Wie kann ich UTF-8-Zeichenoffsets mit PHPs „preg_match()' und „PREG_OFFSET_CAPTURE' korrekt verarbeiten?

Wie kann ich UTF-8-Zeichenoffsets mit PHPs „preg_match()' und „PREG_OFFSET_CAPTURE' korrekt verarbeiten?

Barbara Streisand
Freigeben: 2024-12-03 02:24:09
Original
631 Leute haben es durchsucht

How Can I Correctly Handle UTF-8 Character Offsets with PHP's `preg_match()` and `PREG_OFFSET_CAPTURE`?

PREG_OFFSET_CAPTURE und Multibyte-Zeichen: Zähldiskrepanzen überwinden

Bei Verwendung von preg_match() mit dem u-Modifikator werden sowohl das Muster als auch der Betreff als interpretiert UTF-8-kodiert. Allerdings werden die erfassten Offsets auch mit diesem Modifikator weiterhin in Bytes gezählt. Diese Diskrepanz kann zu Verwirrung führen, wenn UTF-8-zeichenbasierte Indizes erwartet werden.

PHPs Art, Bytes in PREG_OFFSET_CAPTURE zu zählen

Obwohl preg_match() Unicode-Zeichen behandelt, PREG_OFFSET_CAPTURE wird weiterhin mit einem Byte-Zählmechanismus implementiert. Dies bedeutet, dass Zeichen mit Multibyte-Darstellungen, wie z. B. UTF-8, als einzelne Bytes und nicht als zusammengesetzte Zeichen gezählt werden.

Lösung: Verwendung von mb_strlen

Um das entsprechende zu erhalten Um zeichenbasierte Indizes in UTF-8-Strings zu erstellen, können Sie die Funktion mb_strlen() nutzen. Diese Funktion kann die Länge einer UTF-8-Zeichenfolge in Zeichen bereitstellen. Indem Sie dies in Ihren Code integrieren, können Sie den bytebasierten Offset von PREG_OFFSET_CAPTURE in den entsprechenden UTF-8-Zeichenindex übersetzen:

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

In diesem Beispiel berechnet mb_strlen() die Zeichenlänge der Zeichenfolge nach oben auf den von PREG_OFFSET_CAPTURE erhaltenen Offset und stellt so den korrekten UTF-8-Index bereit. Diese Problemumgehung gewährleistet eine genaue Zeichenzählung, wie es bei der Arbeit mit Unicode-Zeichenfolgen erwartet wird.

Das obige ist der detaillierte Inhalt vonWie kann ich UTF-8-Zeichenoffsets mit PHPs „preg_match()' und „PREG_OFFSET_CAPTURE' korrekt verarbeiten?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage