ホームページ  >  記事  >  バックエンド開発  >  PHP は文字セット エンコーディングを自動的に認識し、transcoding_PHP チュートリアルを完了します

PHP は文字セット エンコーディングを自動的に認識し、transcoding_PHP チュートリアルを完了します

WBOY
WBOYオリジナル
2016-07-13 10:48:59818ブラウズ

原理は非常に単純です。gb2312/gbk は中国語の 2 バイトであり、これらの 2 バイトには値の範囲がありますが、utf-8 の中国語の文字は 3 バイトであり、各バイトにも値の範囲があります。エンコーディングの状況に関係なく、英語は 128 未満であり、占有するのは 1 バイト (全角を除く) です。PHP がページを処理するとき、iconv や mb_convert などの関数を使用して文字セットを変換しますが、これには実は前提があります。つまり、正しい変換を実行するには、入力および出力のエンコードが何であるかを事前に知っておく必要があります。

次の関数は、ソース文字列のエンコードを知らなくても、ソース文字列のエンコードを自動的に決定して変換できます。 UTF8エンコードとGB2312エンコードのみをサポートしていますが、ほとんどの国内Webサイトには十分です。


コードは次のとおりです

例2

コードをコピー
関数safeEncoding($string,$outEncoding = 'UTF-8')

{
$encoding = "UTF-8";
for($i=0;$i 続行;

if((ord($string{$i})&224)==224)

{

//最初のバイトが通過しました
$char = $string{++$i};
If((ord($char)&128)==128)
{
// 2 番目のバイトが通過しました
$char = $string{++$i};
If((ord($char)&128)==128)
{
$encoding = "UTF-8";
休憩;
}
}
}
If((ord($string{$i})&192)==192)
{
//最初のバイトが通過しました
$char = $string{++$i};
If((ord($char)&128)==128)
{
// 2 番目のバイトが通過しました
$encoding = "GB2312";
休憩;
}
}
}

if(strtoupper($encoding) == strtoupper($outEncoding))

戻り $string;

それ以外
return iconv($encoding,$outEncoding,$string);
}

コードは次のとおりです コードをコピー


//中国語の文字エンコーディングを識別します。YBlog は utf-8 を使用しているため、引用通知が gb2312 エンコーディングで送信される場合、エンコーディング変換を識別して完了できる必要があります
関数safeEncoding($string,$outEncoding = 'UTF-8')
{
$encoding = "UTF-8"; for($i=0;$i                                                                           If(ord($string{$i})<128)
続く;
If((ord($string{$i})&224)==224)
                                                                 //最初のバイトが通過しました
$char = $string{++$i}; If((ord($char)&128)==128)
                                                                           // 2 番目のバイトが渡されました
$char = $string{++$i}; If((ord($char)&128)==128)
                                                                                        $encoding = "UTF-8"; 壊す;                                                                                                                                                                                                                                                                              If((ord($string{$i})&192)==192)
                                                                 //最初のバイトが通過しました
$char = $string{++$i}; If((ord($char)&128)==128)
                                                                           // 2 番目のバイトが渡されました
$encoding = "GB2312"; 壊す;                                                                                                                                                                                                                                                                                                            If(strtoupper($encoding) == strtoupper($outEncoding))
$string を返す; その他
return iconv($encoding,$outEncoding,$string); }

http://www.bkjia.com/PHPjc/632750.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/632750.html技術記事原理は非常に単純です。中国語の gb2312/gbk は 2 バイトであり、この 2 バイトには値の範囲があるのに対し、UTF-8 の中国語文字は 3 バイトであり、各バイトにも値の範囲があるからです。そしてどこでも英語…
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。