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

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

Linda Hamilton
發布: 2024-12-03 20:24:19
原創
295 人瀏覽過

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板