この記事では、strlen、mb_strlen、substr()、mb_substr()、mb_strcut の違いと使い方を詳しく紹介しています。学習が必要な学生は参考にしてください。
mb_*の文字列分割関数の利用について:
win での設定
php_mbstring.dll 拡張機能をインストールする必要があります
php.ini で php_mbstring.dll を開く必要があります
Linux での設定はオンラインで簡単に検索できます
コードは次のとおりです | コードをコピー |
//テスト時のファイルのエンコード方式はUTF8である必要があります |
結果分析: strlen を計算するとき、UTF8 の中国語文字は 3 文字として扱われるため、「中国語 1 文字」の長さは 3*4+2=14 になります。mb_strlen を計算するとき、内部コードは UTF8 として選択されます。漢字は1文字の長さとして計算されるので、「漢字1文字」の長さは6
mb_strlen デフォルトのエンコーディングを渡すことができます
mb_internal_encoding() を取得しました。
これら 2 つの関数を使用すると、中国語と英語が混在した文字列の占有率を共同で計算できます (中国語の文字の占有率は 2、英語の文字の占有率は
)1 echo (strlen($str) + mb_strlen($str,'UTF8')) / 2;
PHP の組み込み文字列長関数 strlen は、中国語の文字列を正しく処理できません。取得できるのは、文字列によって占有されているバイト数だけです。 GB2312 中国語エンコードの場合、strlen によって取得される値は中国語の文字数の 2 倍ですが、UTF-8 エンコードされた中国語の場合、その差は 3 倍になります (UTF-8 エンコードでは、1 つの中国語文字は 3 バイトを占めます)。
文字列の分割
substr() 関数はテキストを分割できますが、分割するテキストに漢字が含まれる場合、問題が発生することがよくあります。この場合は、mb_substr()/mb_strcut 関数を使用できます
mb_substr は文字を単語ごとに分割し、mb_strcut は文字をバイトごとに分割しますが、どちらも文字の半分を生成しません。
substr() 関数はテキストを分割できますが、分割するテキストに中国語の文字が含まれている場合は、mb_substr()/mb_strcut 関数を使用することができます。 substr() と似ていますが、mb_substr()/mb_strcut は文字列のエンコーディングを設定するために最後にパラメーターを 1 つ追加する必要があります。ただし、ほとんどのサーバーは php_mbstring.dll を php で開く必要があります。 .ini。
例:
コードは次のとおりです | コードをコピー |
echo mb_substr('こうすれば文字列は文字化けしません^_^', 0, 7, 'utf-8'); ?> |
出力: このように私の言葉
コードは次のとおりです | コードをコピー |
echo mb_strcut('こうすれば文字化けしません^_^', 0, 7, 'utf-8'); ?> |
出力: このようになります
上記の例からわかるように、mb_substr は文字を単語ごとに分割し、mb_strcut は文字をバイトごとに分割しますが、どちらも文字の半分を生成しません...
mbstring関数の説明:
PHP の mbstring 拡張モジュールは、マルチバイト文字の処理機能を提供します。最も一般的に使用される方法は、mbstring を使用してマルチバイトの中国語文字を分割することです。これにより、PHP の拡張機能であるため、パフォーマンスが向上します。また、一部のカスタム マルチバイト セグメンテーション関数よりも優れています。
mbstring 拡張機能には、同様の関数を備えたいくつかの関数、mb_substr および mb_strcut が用意されています。説明はマニュアルを参照してください。
mb_substr
mb_substr() は、start パラメーターと length パラメーターで指定された str の部分を返します。
mb_substr() は文字数に基づいてマルチバイトの安全な substr() 操作を実行します。位置は sqlserver/42852.htm target=_blank >最初の文字の位置は 0 です。2 番目の文字の位置は 1 です。
mb_strcut
mb_strcut() は、start パラメーターと length パラメーターで指定された str の部分を返します。
mb_strcut()はmb_substr()と同等の動作を別の方法で行いますが、開始位置がマルチバイト文字の2バイト目以上の場合はマルチバイト文字の1バイト目から開始されます。
長さより短い文字列と、マルチバイト文字列の一部ではない文字、またはシフトシーケンスの途中ではない文字を str から減算します。別の例として、mb_substr と mb_strcut をそれぞれ使用してセグメント化されたテキストがあります。
プレーンテキスト
コード:
コードをコピー | |
mb_substr:私は比較の文字列です
mb_strcut:私はです
テストコード:
コードをコピー | |
* 文字列分割 単語ごとに分割
* @param $content 文字列
} elseif (mb_strlen($content,'utf-8') > $length) { echo ' '; Echo mb_strlen($str,'utf-8');//文字列の長さ echo ' '; echo mb_strcut($str,0,35,'utf-8');//バイト単位で分割 echo ' '; echo mb_substr($str,0,35,'utf-8');//単語ごとに分割 echo ' '; echo Truncate($str,35);//文字列インターセプトメソッド |