使用帶有u 修飾符的preg_match 進行UTF8 處理時,可能會遇到意外行為,其中PREG_OFFSET_CAPTURE傳回位元組計數而不是字元計數.
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!"
儘管如此u 修飾符將模式和主題標記為 UTF8 編碼,偏移量仍以位元組為單位。若要取得基於字元的偏移量,您可以使用 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
以上是為什麼 PREG_OFFSET_CAPTURE 使用 UTF8 和'u”修飾符返回位元組計數而不是字元計數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!