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
Linda HamiltonOriginal
2024-12-03 20:24:19300Durchsuche

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!"

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
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!

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