php mbsubstr の中国語文字化けの解決策: 1. mbstring 拡張ライブラリの mb_substr() を使用してインターセプトします; 2. カスタマイズされた関数 sub_str(){...} によって文字化けの問題を解決します。 " 方法。
この記事の動作環境: Windows7 システム、PHP7.1 バージョン、Dell G3 コンピューター
中国語の問題の解決方法phpの文字化け問題 mbsubstr?
PHPは文字列をインターセプトするためにsubstrを使用しているため、中国語の文字化けの問題が発生します。 mb_substr
を使用してください。例: mb_substr('中国語の文字化けのインターセプトをテストするには',0,5, 'utf-8');
语法 : string substr (string string, int start [, int length]) $rest = substr ("abcdef", 1); // returns "bcdef" $rest = substr ("abcdef", 1, 3); // returns "bcd"
start が負の数の場合、返される文字列は文字列の末尾の開始単語から始まります。
$rest = substr ("abcdef", -1); // returns "f" $rest = substr ("abcdef", -2); // returns "ef" $rest = substr ("abcdef", -3, 1); // returns "d"
パラメータの長さが指定されており、それが正の数値である場合、返される文字列は先頭からの長さの文字になります。
パラメータの長さが指定され、それが負の数の場合、返される文字列は文字列の末尾から length 番目の文字で終了します。
$rest = substr ("abcdef", 1, -1); // returns "bcde"
英語は問題ありません。中国語の
$rest = substr ("中国人", 1, -1); // returns "fdsafsda" 就是乱码了
をテストします。文字のインターセプトの結果は、明らかに望んでいる結果ではありません。PHP の substr 中国語の文字化けの状況は、次の原因を引き起こす可能性があります。プログラムが正常に実行できなくなる可能性があります。
主な解決策は 2 つあります:
1. mbstring 拡張ライブラリの mb_substr() を使用してインターセプトし、文字化けが発生しないようにします。
関数 mb_substr()/mb_strcut() を使用できます。mb_substr()/mb_strcut() の使用法は、mb_substr() の最後にパラメータを 1 つ追加する必要があることを除いて、substr() と似ています。 )/mb_strcut を使用して文字列エンコーディングを設定します。
ただし、ほとんどのサーバーは php_mbstring.dll を開きません。php.ini で php_mbstring.dll を開く必要があります。
echo mb_substr("php中文字符encode",0,4,"utf-8");
最後のエンコードパラメータが指定されていない場合、3バイトを漢字1文字として扱います。これがutf-8エンコードの特徴です。utf-8文字セットの記述を追加すると、 1 文字。ユニットに対してインターセプトされます。
利用する際はphpファイルのエンコードとWebページ表示時のエンコードに注意してください。この mb_substr メソッドを使用するには、事前に文字列のエンコーディングを知っておく必要があります。エンコーディングがわからない場合は、判断する必要があります。mbstring ライブラリには、文字列のエンコーディングをチェックするための mb_check_encoding も提供されていますが、まだ完全ではありません。
PHP にはいくつかの文字列インターセプト関数が付属しており、その中で、substr と mb_substr がよく使用されます。前者が中国語を処理する場合、GBK は 2 長さ単位、UTF は 3 長さ単位となり、後者でエンコーディングを指定すると、1 つの中国語文字が 1 長さ単位になります。
substr では中国語の 1/3 や半分が切れてしまったり文字化けしたりすることがありますが、比較的使いやすいのは mb_substr です。ただし、mb_substr は使いにくい場合があります。例えば、小さな画像の簡単な情報を表示したい場合、漢字は5文字程度がちょうど良いですが、5文字以上の場合は最初の4文字を切り取って「…」を追加すれば処理上問題ありません。中国語ですが、英語や数字を処理する場合、このインターセプトは短すぎます。
推奨: "PHP ビデオ チュートリアル "
次に、インターセプト関数を自分で作成しますが、効率は mbstring 拡張ライブラリを使用するほど高くありません。以下は、UTF-8 でエンコードされた文字列をインターセプトする ecshop の関数です。
rree以上がphp mbsubstrの中国語文字化け問題の解決方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。