ホームページ  >  記事  >  バックエンド開発  >  PHPで中国語をインターセプトすると文字化けが発生する

PHPで中国語をインターセプトすると文字化けが発生する

WBOY
WBOYオリジナル
2016-06-20 12:58:58996ブラウズ

php の組み込み関数 substr() は、指定された文字列をインターセプトできますが、すべての英語の文字列をインターセプトする場合にのみ適しています。文字列に中国語の文字が含まれる場合、json エンコードなどの一部のシナリオでは、インターセプト後に文字化けが発生し、出力結果が null になる場合もあります。

その理由は、異なる文字セットの各文字が占めるバイト数が異なるためです。たとえば、UTF-8 エンコーディングでは、各漢字は 3 バイトを占有するのに対し、GB2312 の漢字は 2 バイトを占有します。英語は 1 バイトのみを占めます。正確に言うと、substr() の最後の 2 つのパラメータは文字数ではなくバイト数を指定しているため、最後の中国語文字が不完全にインターセプトされ、中国語の文字化けが発生する可能性があります。

中国語の文字インターセプトが発生した場合は、mbstring 拡張ライブラリの mb_substr()/mb_strcut() 関数を使用する方が良い方法です。これら 2 つのメソッドの最後の位置には、文字列エンコーディングを指定するために使用される substr() よりも 1 つ多くのパラメーターがあります。
$str = '无乱码的世界更和谐'; echo "mb_substr:" . mb_substr($str, 0, 7, 'utf-8');

mb_substr は文字列を文字単位で分割し、mb_strcut は文字列をバイト単位で分割しますが、どちらも半分の文字を生成しないため、中国語の文字化けは発生しません。

mb_substr() メソッドが存在しないというメッセージが表示された場合は、サーバーが php_mbstring.dll 拡張子を開いていないことを意味します。php.ini 設定ファイル内の php_mbstring.dll を開く必要があります。

extension=php_mbstring.dll


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