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