ホームページ >バックエンド開発 >PHPの問題 >php mbsubstrの中国語文字化け問題の解決方法

php mbsubstrの中国語文字化け問題の解決方法

藏色散人
藏色散人オリジナル
2021-09-01 10:07:042294ブラウズ

php mbsubstr の中国語文字化けの解決策: 1. mbstring 拡張ライブラリの mb_substr() を使用してインターセプトします; 2. カスタマイズされた関数 sub_str(){...} によって文字化けの問題を解決します。 " 方法。

php mbsubstrの中国語文字化け問題の解決方法

この記事の動作環境: 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。