Heim > Backend-Entwicklung > PHP-Tutorial > Warum gibt PREG_OFFSET_CAPTURE mit UTF8 und dem Modifikator „u' die Anzahl der Bytes anstelle der Anzahl der Zeichen zurück?

Warum gibt PREG_OFFSET_CAPTURE mit UTF8 und dem Modifikator „u' die Anzahl der Bytes anstelle der Anzahl der Zeichen zurück?

Linda Hamilton
Freigeben: 2024-12-03 20:24:19
Original
295 Leute haben es durchsucht

Why Does PREG_OFFSET_CAPTURE Return Byte Counts Instead of Character Counts with UTF8 and the 'u' Modifier?

PREG_OFFSET_CAPTURE zählt Bytes trotz UTF8-Ausdrucks

Bei Verwendung von preg_match mit dem u-Modifizierer für die UTF8-Verarbeitung kann es zu einem unerwarteten Verhalten kommen, bei dem PREG_OFFSET_CAPTURE Byte-Anzahlen anstelle von Zeichenzahlen zurückgibt .

preg_match('/H/u', "\xC2\xA1Hola!", $a_matches, PREG_OFFSET_CAPTURE);
echo $a_matches[0][1]; // Prints 2, but should be 1 for "H" in "¡Hola!"
Nach dem Login kopieren

Trotz des u-Modifikators Wenn das Muster und der Betreff als UTF8-codiert gekennzeichnet sind, bleiben die Offsets in Bytes. Um zeichenbasierte Offsets zu erhalten, können Sie mb_strlen:

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

Das obige ist der detaillierte Inhalt vonWarum gibt PREG_OFFSET_CAPTURE mit UTF8 und dem Modifikator „u' die Anzahl der Bytes anstelle der Anzahl der Zeichen zurück?. 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