ホームページ >バックエンド開発 >PHPチュートリアル >php 文字エンコーディング コードを検出_PHP チュートリアル

php 文字エンコーディング コードを検出_PHP チュートリアル

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

関数 utf8_gb2312($str, $default = 'gb2312')
{
$str = preg_replace("/[x01-x7f]+/", "", $str);
(空($str)) の場合は $default;
を返します
$preg = 配列(
"gb2312" => "/^([xa1-xf7][xa0-xfe])+$/", //gb2312かどうかを定期的に判定
"utf-8" => "/^[x{4e00}-x{9fa5}]+$/u", //通常の漢字かどうかの判定(utf8エンコードの条件)、実際にはこの範囲です繁体字中国語の文字が含まれています
);

if ($default == 'gb2312') {
$option = 'utf-8';
} その他 {
$option = 'gb2312';
}

if (!preg_match($preg[$default], $str)) {
return $option;
}
$str = @iconv($default, $option, $str);

// $option に変換できません。元のオプションが $default ではないことを示します
If (空($str)) {
return $option;
}

デフォルトのエンコーディングは gb2312 で、統計をとったところ、90% の確率で gb2312 であることがわかりました。したがって、私の検出関数は gb2312 であるようには見えず、結果は utf8 として検出されます。

1. すべての ASCII を削除します。すべてが ASCII の場合、それは gb2312 です。

2. この文字列が gb2312 であると仮定し、正規表現を使用してそれが true gb2312 であるかどうかを確認し、そうでない場合は utf-8 です

3. 次に、iconv を使用して文字列を utf8 に変換します。変換が失敗した場合は、実際の gb2312 でエンコードされた文字ではない可能性があります

(通常のマッチングで可能な限り正確になるように努めましたが、gb2312 のエンコードは連続的ではないため、依然として穴が存在します)、最終的なエンコードは utf-8 です。

4. それ以外の場合は、gb2312 エンコードです

このようなチェック機能を追加した後は、1000 個のキーワードのうち文字化けしたコードは 1 つだけになり、以前の 100 個近くのキーワードに比べて大幅に減少しました。

http://www.bkjia.com/PHPjc/632337.htmlwww.bkjia.com本当http://www.bkjia.com/PHPjc/632337.html技術記事 function utf8_gb2312($str, $default = 'gb2312') { $str = preg_replace(/[x01-x7f]+/, , $str); if (empty($str)) return $default; gb2312 = /^([xa1-xf7][xa0-xfe])+$/, //正解...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。