ホームページ  >  記事  >  バックエンド開発  >  PHPで文字化けせずに中国語を傍受する方法

PHPで文字化けせずに中国語を傍受する方法

PHPz
PHPzオリジナル
2023-04-24 10:50:541041ブラウズ

インターネットの継続的な発展に伴い、Web アプリケーションの需要は日に日に高まっており、一般的に使用される Web プログラミング言語として、PHP には大規模な開発者グループがあり、幅広いアプリケーション シナリオがあります。 PHP 開発プロセスでは、中国語の文字列をインターセプトすることが一般的な要件です。ただし、PHP の組み込み関数を直接使用して中国語の文字列をインターセプトすると、文字化けが発生します。この記事では、PHPを使って中国語の文字列を文字化けせずにインターセプトする方法を紹介します。

1. PHP 中国語文字列インターセプトの問題

PHP には、文字列をインターセプトするための 3 つの関数、substr() 関数、mb_substr() 関数、iconv_substr() 関数があります。ただし、substr() 関数を使用して中国語の文字列をインターセプトする場合、substr() 関数はバイト単位でインターセプトし、中国語の文字が占めるバイト数は 2 または 3 であるため、インターセプトした文字列が文字化けします。以下に示すように:

$str = '我是中国人';
echo substr($str, 0, 6);//截取前6个字符

上記のコードを実行すると、出力結果は「I am ä¸å›½」になります。ご覧のとおり、これは文字化けしたコードであり、中国語の文字列は正しくインターセプトされません。

mb_substr() 関数と iconv_substr() 関数を使用すると、文字化けした中国語文字列のインターセプトの問題を解決でき、どちらも UTF-8 でエンコードされた中国語文字列のインターセプトをサポートしています。以下にこれら 2 つの機能の使い方を紹介します。

2. mb_substr() 関数は文字化けせずに中国語をインターセプトします

mb_substr() 関数は、PHP で文字列をインターセプトするために特に使用される関数であり、中国語を含む複数の言語をサポートしています。この関数を使用して中国語の文字列をインターセプトすると、文字化けを回避できます。この関数のパラメータは次のとおりです:

mb_substr(string $str, int $start, int $length, string $encoding)

この関数には 4 つのパラメータがあります:

  • $str: インターセプトする必要がある文字列;
  • $start: インターセプトの開始位置、0 から始まります;
  • $length: インターセプトの長さ、負の数の場合、文字列の終わりまでインターセプトされます;
  • $encoding: 文字列エンコード方式。通常は UTF-8 エンコードです。

たとえば、次のコードは mb_substr() 関数を使用して中国語の文字列をインターセプトします。

$str = '我是中国人';
echo mb_substr($str, 0, 6, 'utf-8');//截取前6个字符

上記のコードを実行すると、出力結果は「私は中国です」となります。

3. iconv_substr() 関数は文字化けせずに中国語をインターセプトします

mb_substr() 関数に加えて、iconv_substr() 関数も文字化けした中国語文字列をインターセプトする問題を解決できます。 iconv_substr() 関数も、PHP で文字列をインターセプトするために特に使用される関数であり、4 番目のパラメーターがターゲット エンコーディングではなく文字列のソース エンコーディングを表すという点で mb_substr() 関数とは異なります。ここで、ソース エンコーディング パラメータは実際の文字列エンコーディングと一致している必要があることに注意してください。この関数のパラメータは次のとおりです:

iconv_substr(string $str,int $start, int $length = NULL, string $charset = ini_get('iconv.internal_encoding'))

この関数には 4 つのパラメータがあります:

  • $str: インターセプトする必要がある文字列;
  • $start: 0 から始まるインターセプトの開始位置;
  • $length: インターセプトの長さ、NULL の場合、文字列の終わりまでインターセプトされます;
  • $charset: ソース文字列のエンコード方式 (通常は UTF-8 エンコード)。

たとえば、次のコードは iconv_substr() 関数を使用して中国語の文字列をインターセプトします。

$str = '我是中国人';
echo iconv_substr($str, 0, 6, 'utf-8');//截取前6个字符

上記のコードを実行すると、出力結果は「私は中国です」となります。

4. 概要

Web アプリケーション開発では、中国語の文字列をインターセプトすることが一般的な要件です。 PHP 組み込み関数 substr() 関数は文字列をインターセプトできますが、バイト単位でインターセプトするため、中国語の文字を正しく処理できず、インターセプトした文字列が文字化けします。したがって、この問題を解決するには、mb_substr() 関数または iconv_substr() 関数を使用できます。どちらの関数も、UTF-8 でエンコードされた中国語文字列のインターセプトをサポートしており、文字化けを回避できます。

以上がPHPで文字化けせずに中国語を傍受する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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