ホームページ >バックエンド開発 >PHPチュートリアル >「preg_match()」の前にマルチバイト文字数を正しく取得するにはどうすればよいですか?

「preg_match()」の前にマルチバイト文字数を正しく取得するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-08 09:11:15760ブラウズ

How to Correctly Get Multibyte Character Count Before a `preg_match()`?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。