PHP文字列長計算-strlen()関数の使用説明

1891 ワード

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

パラメータstring_inputは処理する文字列です.
strlen()関数は、文字列が占めるバイト長を返します.1つの英字、数字、様々な記号が1バイトで、それらの長さはすべて1です.1つの昼文字は2バイトを占めるので、1つの昼文字の長さは2です.たとえば
 
  
echo strlen("www.sunchis.com");
echo strlen(" ");
?>

“echo strlen("www.sunchis.com");”の実行結果:15
「echo strlen(「三知開発網」);」の実行結果:15
ここで質問ですが、中国語の文字は2バイトを占めているのではないでしょうか.「三知開発網」って、五つの漢字なのに、どうして15?
理由は、strlen()計算では、UTF-8の中国語文字を長さ3として扱うためです.中国語と英語が混在している場合、文字列の長さをどのように正確に計算しますか?ここでは、別の関数mb_を導入する必要があります.strlen().mb_strlen()関数の使い方はstrlen()とほぼ同じで、文字セット符号化を指定するパラメータが1つ増えただけです.関数のプロトタイプ:
 
  
int mb_strlen(string string_input, string encode);

PHPに内蔵された文字列長関数strlenは、中国語の文字列を正しく処理できません.文字列が占めるバイト数だけが得られます.GB 2312の中国語符号化ではstrlenが得た値は漢字個数の2倍であり、UTF-8符号化の中国語では3倍の差がある(UTF-8符号化では漢字1文字が3バイトを占める).したがって、次のコードは、中国語文字列の長さを正確に計算することができます.
 
  
$str = " sunchis ";
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なので、「三知sunchis開発網」の長さは5×3+7×1=22
mb_strlen計算では、選択したイントラコードがUTF 8の場合、1つの中国語文字を長さ1として計算するので、「三知sunchis開発網」の長さは5×1+7×1=12
あとは纯数学の问题ですが、ここではくどくど言わないでください.
注:mb_の場合strlen($str,'UTF-8')は、2番目のパラメータを省略するとPHPの内部符号化が使用されます.内部符号化はmb_internal_encoding()関数が得られます.注意すべきはmb_strlenはPHPコア関数ではない、使用前にphpを確保する必要がある.iniにphp_がロードされましたmbstring.dllは、「extension=php_mbstring.dll」という行が存在し、コメントされていないことを確認します.そうしないと、関数が定義されていないという問題が発生します.