Heim > Backend-Entwicklung > PHP-Tutorial > Wie erhalte ich den richtigen Zeichenversatz in UTF-8-Zeichenfolgen nach einem preg_match() mit PREG_OFFSET_CAPTURE?

Wie erhalte ich den richtigen Zeichenversatz in UTF-8-Zeichenfolgen nach einem preg_match() mit PREG_OFFSET_CAPTURE?

Linda Hamilton
Freigeben: 2024-12-03 01:01:09
Original
972 Leute haben es durchsucht

How to Get the Correct Character Offset in UTF-8 Strings After a preg_match() with PREG_OFFSET_CAPTURE?

Erhalten Sie die Anzahl der Multibyte-Zeichen vor dem Abgleich mit preg_match()

Problem:

Bei der Ausführung eine reguläre Ausdrucksübereinstimmung mit einer UTF-8-codierten Zeichenfolge unter Verwendung von preg_match() mit dem Parameter PREG_OFFSET_CAPTURE, dem resultierenden Offset wird in Bytes berechnet, nicht in der Zeichenanzahl. Dies kann beim Abgleichen von Multibyte-Zeichen problematisch sein, da ihre Bytelänge von ihrer Zeichenlänge abweichen kann.

Wenn Sie beispielsweise den folgenden Code verwenden, um das „H“-Zeichen in einer UTF-8-codierten Zeichenfolge abzugleichen, wird das Ergebnis angezeigt Der Offset ist 2, obwohl das Zeichen „H“ am Index steht 1:

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

Lösung:

Um den korrekten Zeichenanzahl-Offset zu erhalten, verwenden Sie mb_strlen(), um die Länge der Teilzeichenfolge bis zur Übereinstimmung zu bestimmen:

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

Dadurch wird der Offset in UTF-8-Zeichen berechnet und liefert das korrekte Ergebnis.

Das obige ist der detaillierte Inhalt vonWie erhalte ich den richtigen Zeichenversatz in UTF-8-Zeichenfolgen nach einem preg_match() mit PREG_OFFSET_CAPTURE?. 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