ホームページ >バックエンド開発 >PHPの問題 >PHPが文字列を分割して文字化けした場合の対処方法

PHPが文字列を分割して文字化けした場合の対処方法

藏色散人
藏色散人オリジナル
2021-03-31 09:39:442315ブラウズ

php 分割文字化けの解決策: 1. mbstring 拡張ライブラリの「mb_substr()」を使用して文字列をインターセプトします; 2. カスタムの「function sub_str」メソッドを使用して文字列をインターセプトします。

PHPが文字列を分割して文字化けした場合の対処方法

この記事の動作環境: Windows 7 システム、PHP バージョン 7.1、DELL G3 コンピューター

substr() を使用して、 PHP における文字のインターセプト 中国語文字化けの問題

PHP のプログラム開発では、情報の一覧を出力する場合など、タイトルが長すぎないように文字列のインターセプト操作が頻繁に行われます。論文要約を印刷するには、文字列インターセプト操作という一連の操作も実行する必要があります。これらの要件に遭遇した場合、それを実現するために substr() メソッドを使用することをよく考えますが、すべて英語の文字列をインターセプトするには substr() メソッドの方が適しています。

しかし、文字列に中国語の文字が含まれている限り、PHP substr の中国語文字化けが発生する可能性があります。これは、中国語の UTF-8 エンコーディングでは、各中国語文字が 3 バイトを占有するのに対し、GB2312 は 2 バイト、英語は 1 バイトを占有するためです。 byte 、インターセプトされた桁数が正確ではない、substr() は中国語の文字を突然半分に「切断」し、壊れた文字が次の文字を引っ張って単語を作成するため、PHP substr 中国語の文字化けが表示されます。

substr --- 文字列の一部を取得します

構文: string substr (string string, int start [, int length])

説明:

substr() は、パラメータ start と length で指定された文字列の一部を返します。

start が正の数の場合、返される文字列は string の開始文字から始まります。

例 :

<?php
$rest = substr ("abcdef", 1); // returns "bcdef"
$rest = substr ("abcdef", 1, 3); // returns "bcd"
?>

start が負の数の場合、返される文字列は文字列の末尾の開始単語から始まります。

例 :

<?php
$rest = substr ("abcdef", -1); // returns "f"
$rest = substr ("abcdef", -2); // returns "ef"
$rest = substr ("abcdef", -3, 1); // returns "d"
?>

パラメータの長さが指定されており、それが正の数の場合、返される文字列は先頭からの長さの文字になります。
パラメータの長さが指定され、それが負の数値である場合、返される文字列は文字列の末尾の長さ 番目の文字で終了します。

例:

<?php
$rest = substr ("abcdef", 1, -1); // returns "bcde"
?>

英語は問題ありません。中国語をテストします

<?php
$rest = substr ("中国人", 1, -1); // returns "fdsafsda" 就是乱码了
?>

文字をインターセプトした結果は、私たちが望むものではありません。その結果、PHP の substr で中国語の文字化けが発生し、プログラムが正常に実行できなくなる可能性があります。

1. mbstring 拡張ライブラリの mb_substr() を使用してインターセプトし、文字化けが発生しないようにします。

関数 mb_substr()/mb_strcut() を使用できます。mb_substr()/mb_strcut() の使用法は、複数の行を追加する必要があることを除いて、substr() と似ています。 mb_substr()/mb_strcut の終わり。文字列のエンコーディングを設定するパラメータですが、ほとんどのサーバーは php_mbstring.dll を開きません。php.ini で php_mbstring.dll を開く必要があります。

<?php
  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 の関数です。

うわー

以上がPHPが文字列を分割して文字化けした場合の対処方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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