PHP中のstreen()とmb_streen()の違いは簡単に分析します。


phpでよく見られる計算文字列の長さの関数は、streenとmb_です。streen.文字が全部英語の文字である場合、両者は同じです。ここでは主に比較してみます。中国語と英語が混じっている時、二つの計算結果が出ます。
まず一例を見てみます。

<?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 
?>
結果分析:strelenで計算すると、一つのUTF 8に対する中国語の文字は3つの長さですので、「中国語a字1符」の長さは3*4+2=14で、mb_strelenで計算すると、内部コードをUTF 8に選択すると、一つの中国語文字を長さ1として計算しますので、「中国語a字1符」の長さは6です。
この二つの関数を利用すれば、英語の混合列の占有率はどれぐらいですか?

echo (strlen($str) + mb_strlen($str,'UTF8')) / 2;
例えば、「中国語a字1符」のstreen($str)の値は14、mb_streen($str)の値は6です。「中国語a字1符」の桁は10です。
PHPに内蔵されている文字列長関数strelenは中国語文字列を正しく処理できません。文字列のバイト数だけを得られます。
GB 2312の中国語コードについては、streenは漢字の個数の2倍の値を得ていますが、UTF-8符号化の中国語は3倍の差があります。
mb_を採用するstreen関数はこの問題をより良く解決できます。
mbstreenの使い方はstreenと似ていますが、文字コードを指定するための第二のオプションパラメータがあります。
例えば、UTF-8の文字列は、strの長さが得られます。mb_を使ってもいいです。streen($str、'UTF-8')二つ目のパラメータを省略するとPHPの内部コードが使用されます。内部コードはmb_を通すことができます。インターナールencoding関数を得た。
注意:mb_strelenはPHPコア関数ではなく、使用前にphp.iniにphp_をロードしたことを確認する必要があります。mbstring.dll
つまり「extension=php_」を確保します。mbstring.dllという行は存在し、注釈されていません。そうでないと、関数が定義されていない問題があります。