ホームページ  >  記事  >  バックエンド開発  >  iconv library を使用しない gb2312 と utf-8 間の交換関数_PHP チュートリアル

iconv library を使用しない gb2312 と utf-8 間の交換関数_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 16:11:321012ブラウズ


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

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

/ **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,$テキスト,$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);



http://www.bkjia.com/PHPjc/313958.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/313958.html技術記事 gb2312.txt のコピー (184799 バイト) は実際には大きすぎるため、Unicode に変換する必要があります。 この比較テーブルは 51965 バイトであり、これははるかに小さいです。 iconv 関数ライブラリが使用できない分野については...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。