preg_match() を使用して一致前のマルチバイト文字数を取得します (PREG_OFFSET_CAPTURE パラメータは役に立たないバイト数カウントです)
UTF-8 でエンコードされた文字列では、preg_match () を使用すると、キャプチャされた一致内の誤った文字オフセットが報告される場合があります。 PREG_OFFSET_CAPTURE パラメータ。その理由は、対象の文字列が「u」修飾子を使用して UTF-8 として解釈される場合でも、キャプチャされたオフセットがバイト単位でカウントされるためです。
解決策:
UTF-8 でキャプチャされた一致内の正しい文字オフセットを取得するには、mb_strlen を使用して UTF-8 バイトに基づいて文字数を計算します。オフセット:
$str = "\xC2\xA1Hola!"; preg_match('/H/u', $str, $a_matches, PREG_OFFSET_CAPTURE); echo mb_strlen(substr($str, 0, $a_matches[0][1]));
以上が「preg_match()」の前にマルチバイト文字数を正しく取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。