Heim >Backend-Entwicklung >PHP-Tutorial >Wie erhalte ich die Anzahl der Multibyte-Zeichen vor einem „preg_match()' korrekt?

Wie erhalte ich die Anzahl der Multibyte-Zeichen vor einem „preg_match()' korrekt?

Susan Sarandon
Susan SarandonOriginal
2024-12-08 09:11:15746Durchsuche

How to Correctly Get Multibyte Character Count Before a `preg_match()`?

Multibyte-Zeichenanzahl vor dem Abgleich mit preg_match() abrufen (PREG_OFFSET_CAPTURE-Parameter zählt nicht hilfreich Bytes)

In UTF-8-codierten Zeichenfolgen preg_match () meldet möglicherweise falsche Zeichenoffsets innerhalb erfasster Übereinstimmungen, wenn der Parameter PREG_OFFSET_CAPTURE verwendet wird. Der Grund dafür ist, dass die erfassten Offsets in Bytes gezählt werden, auch wenn die Betreffzeichenfolge als UTF-8 mit dem Modifikator „u“ interpretiert wird.

Lösung:

Um die korrekten Zeichenversätze innerhalb erfasster UTF-8-Übereinstimmungen zu erhalten, verwenden Sie mb_strlen, um die Zeichenanzahl basierend auf dem UTF-8-Byte zu berechnen Offsets:

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

Das obige ist der detaillierte Inhalt vonWie erhalte ich die Anzahl der Multibyte-Zeichen vor einem „preg_match()' korrekt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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