PHP では、substr() 関数が中国語の文字列をインターセプトすると文字化けが発生することがありますが、これは中国語と欧文の 1 バイトが占めるバイト数が異なるためです。
substr の長さパラメータはバイト単位で計算されます。GB2312 でエンコードする場合、中国語の文字は 2 バイトを占め、英語の文字は 1 バイトを占めます。一方、GB2312 エンコードでは、In UTF-8 エンコードの場合、中国語文字は 2 バイトまたは 3 バイトを占め、英語または半角の句読点文字は 1 バイトを占めることがあります。 (推奨学習: PHP プログラミングの入門から熟練度まで )
PHP 関数 substr を直接使用して中国語の文字をインターセプトすると、主に substr が中国語の文字を強制的に変換するため、文字化けが発生する可能性があります。半分に「見た」。解決策:
1. mbstring 拡張ライブラリの mb_substr インターセプトを使用して、文字化けを回避します。
2. インターセプト関数を自分で作成しますが、効率は mbstring 拡張ライブラリを使用するほど高くありません。
3. インターセプトされた文字列を出力するだけの場合は、substr($str, 0, 30).chr(0) の方法で実装できます。
substr() 関数はテキストを分割できますが、分割するテキストに漢字が含まれる場合に問題が発生することが多いため、この場合は mb_substr()/mb_strcut 関数を使用できます。
mb_substr()/mb_strcut の使用法は、文字列のエンコーディングを設定するために mb_substr()/mb_strcut の最後にパラメータを 1 つ追加する必要がある点を除いて、substr() と似ていますが、ほとんどのサーバーはphp_mbstring.dll を開かないでください。php.ini で php_mbstring.dll を開く必要があります。
例:
<?php echo mb_substr('这样一来我的字符串就不会有乱码^_^', 0, 7, 'utf-8'); ?>
出力: このように私の言葉
<?php echo mb_strcut('这样一来我的字符串就不会有乱码^_^', 0, 7, 'utf-8'); ?>
出力: このように一
上記の例からわかるように、mb_substr は文字を単語ごとに分割し、mb_strcut は文字をバイトごとに分割しますが、どちらも文字の半分を生成しません。
以上がPHPで文字化けせずに文字列をインターセプトする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。