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