strlenとmb_strlenの違い
3544 ワード
phpでよく見られる文字列の長さを計算する関数はstrlenとmb_です.strlen.文字がすべて英語の文字である場合、両者は同じです.ここでは主に、中国語と英語が混在している場合、2つの計算結果を比較します.
AD:2013クラウドコンピューティングアーキテクチャサミットの超低価格チケット獲得中
PHPではstrlenとmb_strlenは文字列の長さを求める関数ですが、一部の初心者にとってはマニュアルを見なければ、その違いがよく分からないかもしれません.次に例を通して、両者の違いを説明します.
まず例を見てみましょう.
結果分析:strlen計算では、UTF 8に対する中国語文字は3文字長であるため、「中国語a字1文字」の長さは3*4+2=14でmb_strlenの計算時に選択するイントラコードがUTF 8であれば、1つの中国語文字を長さ1として計算するので、「中国語a字1文字」の長さは6となる.
この2つの関数を使用すると、1つの中国語と英語が混在している列の占有率を計算することができます(1つの中国語文字の占有率は2で、英語文字は1です).
例えば「中国語a字1文字」のstrlen($str)値は14,mb_strlen($str)の値が6であると、「中国語a字1文字」の占有率が10と算出できる.
PHPに内蔵された文字列長関数strlenは、中国語の文字列を正しく処理できません.文字列が占めるバイト数だけが得られます.GB 2312の中国語符号化ではstrlenが得た値は漢字個数の2倍であり、UTF-8符号化の中国語では3倍の差がある(UTF-8符号化では漢字1文字が3バイトを占める).
mb_を採用strlen関数はこの問題をよりよく解決できる.mb_strlenの使い方はstrlenと似ていますが、文字符号化を指定する2番目のオプションパラメータがあります.例えばUTF-8の文字列$str長を得るにはmb_strlen($str,'UTF-8').2番目のパラメータを省略するとPHPの内部コードが使用されます.内部符号化はmb_internal_encoding()関数が得られます.
注意すべきはmb_strlenはPHPコア関数ではない、使用前にphpを確保する必要がある.iniにphp_がロードされましたmbstring.dllは、「extension=php_mbstring.dll」という行が存在し、コメントされていないことを確認します.そうしないと、関数が定義されていないという問題が発生します.
AD:2013クラウドコンピューティングアーキテクチャサミットの超低価格チケット獲得中
PHPではstrlenとmb_strlenは文字列の長さを求める関数ですが、一部の初心者にとってはマニュアルを見なければ、その違いがよく分からないかもしれません.次に例を通して、両者の違いを説明します.
まず例を見てみましょう.
- <?php
- // UTF8
- $str=' a 1 ';
- echo strlen($str).'<br>';//14
- echo mb_strlen($str,'utf8').'<br>';//6
- echo mb_strlen($str,'gbk').'<br>';//8
- echo mb_strlen($str,'gb2312').'<br>';//10
- ?>
結果分析:strlen計算では、UTF 8に対する中国語文字は3文字長であるため、「中国語a字1文字」の長さは3*4+2=14でmb_strlenの計算時に選択するイントラコードがUTF 8であれば、1つの中国語文字を長さ1として計算するので、「中国語a字1文字」の長さは6となる.
この2つの関数を使用すると、1つの中国語と英語が混在している列の占有率を計算することができます(1つの中国語文字の占有率は2で、英語文字は1です).
- echo (strlen($str) + mb_strlen($str,'UTF8')) / 2;
例えば「中国語a字1文字」のstrlen($str)値は14,mb_strlen($str)の値が6であると、「中国語a字1文字」の占有率が10と算出できる.
- echo mb_internal_encoding();
PHPに内蔵された文字列長関数strlenは、中国語の文字列を正しく処理できません.文字列が占めるバイト数だけが得られます.GB 2312の中国語符号化ではstrlenが得た値は漢字個数の2倍であり、UTF-8符号化の中国語では3倍の差がある(UTF-8符号化では漢字1文字が3バイトを占める).
mb_を採用strlen関数はこの問題をよりよく解決できる.mb_strlenの使い方はstrlenと似ていますが、文字符号化を指定する2番目のオプションパラメータがあります.例えばUTF-8の文字列$str長を得るにはmb_strlen($str,'UTF-8').2番目のパラメータを省略するとPHPの内部コードが使用されます.内部符号化はmb_internal_encoding()関数が得られます.
注意すべきはmb_strlenはPHPコア関数ではない、使用前にphpを確保する必要がある.iniにphp_がロードされましたmbstring.dllは、「extension=php_mbstring.dll」という行が存在し、コメントされていないことを確認します.そうしないと、関数が定義されていないという問題が発生します.