ホームページ  >  記事  >  バックエンド開発  >  PHP 文字列の長さの計算 - strlen() 関数の使用方法の概要

PHP 文字列の長さの計算 - strlen() 関数の使用方法の概要

高洛峰
高洛峰オリジナル
2017-01-05 11:45:341817ブラウズ

strlen() 関数と mb_strlen() 関数

PHP では、関数 strlen() は文字列の長さを返します。関数のプロトタイプは次のとおりです。

int strlen(string string_input);

パラメーター string_input は、処理される文字列です。

strlen() 関数は、文字列が占めるバイトの長さを返します。英語の文字、数字、およびさまざまな記号はすべて 1 バイトを占め、その長さはすべて 1 です。正午の文字は 2 バイトを占めるため、正午の文字の長さは 2 です。たとえば、

<?php 
echo strlen("www.php.cn"); 
echo strlen("PHP中文网"); 
?>

"echo strlen("www.php.cn");" 実行結果は次のようになります: 15

"echo strlen("PHP Chinese Network");" 実行結果は次のようになります: 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 バイトを占めます)。 したがって、次のコードは中国語の文字列の長さを正確に計算できます:

<?php 
$str = "三知sunchis开发网"; 
echo strlen($str)."<br>"; //结果:22 
echo mb_strlen($str,"UTF8")."<br>"; //结果:12 
$strlen = (strlen($str)+mb_strlen($str,"UTF8"))/2; 
echo $strlen; //结果:17 
?>

原理分析:

strlen() 計算するとき、UTF-8 で扱われる中国語の文字の長さは 3 なので、「三知sunchisDevelopmentNetwork」の長さは5×3+7×1=22 です
mb_strlen を計算する際、内部コードが UTF8 に選択されている場合、漢字の長さは 1 として計算されるため、「Sanzhi Sunchis Development Network」の長さは5×1+ 7×1=12

残りは純粋な数学の問題なので、ここでは詳しく説明しません...

注: mb_strlen($str,'UTF-8') の場合、 2 番目のパラメータを省略すると、PHP の内部エンコーディングが使用されます。内部エンコーディングは、mb_internal_encoding() 関数を通じて取得できます。 mb_strlen は PHP のコア関数ではないことに注意してください。使用する前に、php_mbstring.dll が php.ini にロードされていること、つまり「extension=php_mbstring.dll」という行が存在することを確認する必要があります。コメントアウトされていない場合は、関数の問題が未定義になります。

PHP 文字列の長さの計算 - strlen() 関数の使用方法の詳細については、PHP 中国語 Web サイトの関連記事に注目してください。

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