strlen() 関数と mb_strlen() 関数
PHP では、関数 strlen() は文字列の長さを返します。関数のプロトタイプは次のとおりです:
コードをコピーします コードは次のとおりです:
int strlen(string string_input)
パラメータ string_input は処理される文字列です。
strlen() 関数は、文字列が占めるバイトの長さを返します。英語の文字、数字、およびさまざまな記号はすべて 1 バイトを占め、その長さはすべて 1 です。正午の文字は 2 バイトを占めるため、正午の文字の長さは 2 です。たとえば、
コードをコピーします コードは次のとおりです:
echo strlen("www.sunchis.com");
echo strlen("Sanzhi Development Network"); >
「echo strlen("www.sunchis.com");」の実行結果: 15
「echo strlen("三知開発网");」の実行結果: 15
ここでの質問ですが、漢字は2バイトありませんか? 「Sanzhi Development Network」には明らかに 5 つの漢字が含まれていますが、結果が 15 文字になるのはなぜでしょうか。
その理由は、strlen() を計算するときに、UTF-8 の漢字の場合、長さが 3 であるものとして扱われるからです。中国語と英語が混在している場合、文字列の長さを正確に計算するにはどうすればよいでしょうか?ここで、別の関数 mb_strlen() を導入する必要があります。 mb_strlen() 関数の使用法は、文字セット エンコーディングを指定する追加パラメーターがあることを除いて、strlen() とほぼ同じです。関数のプロトタイプは次のとおりです:
コードをコピー コードは次のとおりです:
int mb_strlen(string string_input, string encode);
PHP の組み込み文字列長関数 strlen は中国語の文字列を正しく処理できません。取得できるのは、文字列が占めるバイト数だけです。 GB2312 中国語エンコードの場合、strlen によって取得される値は中国語の文字数の 2 倍ですが、UTF-8 エンコードされた中国語の場合、その差は 3 倍になります (UTF-8 エンコードでは、1 つの中国語文字は 3 バイトを占めます)。 したがって、次のコードは中国語の文字列の長さを正確に計算できます:
コードをコピー コードは次のとおりです:
$str = "三知sunchisDevelopmentNetwork"
echo strlen( $ str)."
"; //結果: 22
echo mb_strlen($str,"UTF8")."
"; //結果: 12
$strlen = (strlen($str) + mb_strlen($str,"UTF8"))/2;
echo $strlen; //結果: 17
原理分析:
strlen() は、計算時に UTF-8 の漢字を扱います。長さは 3 なので、「Sanzhi Sunchis Development Network」の長さは 5×3+7×1=22 です
mb_strlen を計算する際、内部コードが UTF8 に選択されている場合、漢字は長さ 1 として計算されます。 「Sanzhi Sunchis Development Network」の長さは 5×1+7×1=12 です
残りは純粋な数学的な問題なので、ここでは詳しく説明しません...
注:
For mb_strlen($ str, 'UTF-8')、2 番目のパラメータを省略すると、PHP の内部エンコーディングが使用されます。内部エンコーディングは、mb_internal_encoding() 関数を通じて取得できます。 mb_strlen は PHP のコア関数ではないことに注意してください。これを使用する前に、php_mbstring.dll が php.ini にロードされていること、つまり「extension=php_mbstring.dll」という行が存在することを確認する必要があります。コメントアウトされていない場合は、関数の問題が未定義になります。
http://www.bkjia.com/PHPjc/824847.html
www.bkjia.comtruehttp://www.bkjia.com/PHPjc/824847.html技術記事 strlen() 関数と mb_strlen() 関数 PHP では、strlen() 関数は文字列の長さを返します。関数のプロトタイプは次のとおりです。 コードをコピーします。 コードは次のとおりです。 int strlen(string string_input) パラメータ string...