Heim >Backend-Entwicklung >PHP-Tutorial >Wie erhalte ich die Anzahl der Multibyte-Zeichen vor einem „preg_match()' korrekt?
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!