ホームページ  >  記事  >  バックエンド開発  >  PHP関数substrによってインターセプトされた中国語文字化けの解決策

PHP関数substrによってインターセプトされた中国語文字化けの解決策

WBOY
WBOYオリジナル
2016-07-25 08:58:111954ブラウズ
この記事では、PHPの文字列インターセプト関数substrを使用して漢字をインターセプトする際に文字化けが発生する問題の解決方法を紹介します。困っている友達は参考にしてください。

php文字列インターセプト関数substr:

string substr ( string $string , int $start [, int $length ] ) string 内の開始位置から始まる長さ length の文字列を返します

substr 関数は文字をバイト単位でインターセプトします。GB2312 でエンコードされた場合は 2 バイト、utf-8 でエンコードされた場合は 3 バイトになります。したがって、指定された長さの文字列をインターセプトする場合、中国語の文字が切り捨てられると、返される結果が返されます。表示すると文字化けしてしまいます。

参考までに、以下に 2 つの解決策を示します。

1、代わりに mb_substr 関数を使用します string mb_substr ( string $str , int $start [, int $length [, string $encoding ]] ) substr() 関数と似ていますが、文字の安全性を確保するために文字数に基づいてカウントされます。 mb_substr()関数を使用して文字化けしないようにしてください。 欠点: 長さの統計は、バイト数の統計ではなく、文字数の統計になります。表示に使用した場合、同じ長さの中国語の結果と英語の結果では、表示長に大きな差が生じます。

2. 自作関数でsubstr関数を強化 中国語の文字は 2 つの長さ単位で計算されるため、中国語と英語が混在する環境での文字列インターセプト結果の最終的な表示長は近くなります。 最後の不完全な文字は破棄されるため、文字化けが発生しません。また、中国語の文字で一般的に使用される UTF-8 エンコーディングおよび GB2312 エンコーディングと互換性があり、優れた汎用性を備えています。

完全なコードは次のとおりです (strto lower 関数が使用されます)。

りー


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