首頁 >後端開發 >php教程 >為什麼 PREG_OFFSET_CAPTURE 使用 UTF8 和'u”修飾符返回位元組計數而不是字元計數?

為什麼 PREG_OFFSET_CAPTURE 使用 UTF8 和'u”修飾符返回位元組計數而不是字元計數?

Linda Hamilton
Linda Hamilton原創
2024-12-03 20:24:19300瀏覽

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

儘管使用UTF8 表達式,PREG_OFFSET_CAPTURE 仍對位元組進行計數

使用帶有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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn