iconv ライブラリを使用しない gb2312 と utf-8 間の互換機能

WBOY
リリース: 2016-06-13 12:46:27
オリジナル
1096 人が閲覧しました


gb2312.txt のコピー (184799 バイト) は実際には大きすぎるため、Unicode に変換する必要があります。
この比較表は 51965 バイトで、これよりはるかに小さいです。
iconv 関数ライブラリが使用できない状況でも非常に実用的です。

//比較テーブルの使用
$filename = "gb2utf8.txt";
$fp = fopen($filename,"r"); while(! feof($fp)) {
list($gb,$utf8) = fgetcsv($fp,10);
$charset[$gb] = $utf8; fclose($fp);
//後で使用するために上記の比較表を配列に読み込みます

/**gb2312 から utf-8**/
function gb2utf8($text, &$charset) {
//テキストからコンポーネントを抽出します。中国語文字は 1 つの要素、連続する非中国語文字は 1 つの要素です
preg_match_all("/(?:[x80-xff].)|[x01-x7f] / ",$text,$ tmp);
$tmp = $tmp[0];
//漢字を区切る
$ar = array_intersect($tmp, array_keys($charset));
//中国語の文字エンコーディングを置き換えます
foreach($ar as $k=>$v)
$tmp[$k] = $charset[$v]
//エスケープされた文字列を返します
return join(' ',$tmp);
}

/**utf-8 から gb2312**/
function utf82gb($text, &$charset) {
$p = " /[xf0-xf7 ][x80-xbf]{3}|[xe0-xef][x80-xbf]{2}|[xc2-xdf][x80-xbf]|[x01-x7f] /";
preg_match_all($p ,$text,$r);
$utf8 = array_flip($charset);
foreach($r[0] as $k=>$v)
if(isset) ($utf8[$ v]))
$r[0][$k] = $utf8[$v];
return join('',$r[0]); 🎜>
//Test
$s = gb2utf8('これは比較テーブルのテストです', $charset);
echo utf82gb($s, $charset)>?


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート