UTF-8转GBK的PHP函数,从phpcms v9中提取

作者:enenba | 发表于:2012-02-05 00:53 | 分类:php源码

     以下内容是从phpcms v9中提取的函数源码,去除掉其它的转码代码,只留下UTF8转GBK部分的源码,对采集有用哦

共有两个文件,一个PHP函数源码文件,一个转编码库文件,

以下附上PHP函数部分

在附件里有两个文件+测试文件test.txt

<?php
/**
 * utf8转gbk
 * @param $utfstr
 */
function utf8_to_gbk($utfstr) {
	global $UC2GBTABLE;
	$okstr = '';
	if(empty($UC2GBTABLE)) {
		$filename = 'encoding/gb-unicode.table';
		$fp = fopen($filename, 'rb');
		while($l = fgets($fp,15)) {        
			$UC2GBTABLE[hexdec(substr($l, 7, 6))] = hexdec(substr($l, 0, 6));
		}
		fclose($fp);
	}
	$okstr = '';
	$ulen = strlen($utfstr);
	for($i=0; $i<$ulen; $i++) {
		$c = $utfstr[$i];
		$cb = decbin(ord($utfstr[$i]));
		if(strlen($cb)==8) { 
			$csize = strpos(decbin(ord($cb)),'0');
			for($j = 0; $j < $csize; $j++) {
				$i++; 
				$c .= $utfstr[$i];
			}
			$c = utf8_to_unicode($c);
			if(isset($UC2GBTABLE[$c])) {
				$c = dechex($UC2GBTABLE[$c]+0x8080);
				$okstr .= chr(hexdec($c[0].$c[1])).chr(hexdec($c[2].$c[3]));
			} else {
				$okstr .= '&#'.$c.';';
			}
		} else {
			$okstr .= $c;
		}
	}
	$okstr = trim($okstr);
	return $okstr;
}
/**
 * utf8转unicode
 * @param  $c
 */
function utf8_to_unicode($c) {
	switch(strlen($c)) {
		case 1:
		  return ord($c);
		case 2:
		  $n = (ord($c[0]) & 0x3f) << 6;
		  $n += ord($c[1]) & 0x3f;
		  return $n;
		case 3:
		  $n = (ord($c[0]) & 0x1f) << 12;
		  $n += (ord($c[1]) & 0x3f) << 6;
		  $n += ord($c[2]) & 0x3f;
		  return $n;
		case 4:
		  $n = (ord($c[0]) & 0x0f) << 18;
		  $n += (ord($c[1]) & 0x3f) << 12;
		  $n += (ord($c[2]) & 0x3f) << 6;
		  $n += ord($c[3]) & 0x3f;
		  return $n;
	}
}

//以下是测试内容
//test.txt 为utf8编码文档
header('Content-type: text/html; charset=gbk');
$str = file_get_contents('test.txt');
echo utf8_to_gbk($str); 
?>

另一个转码函数:http://enenba.com/?post=198

end

附件下载/演示源码:
utf8_to_gbk.rar35.46KB

上一篇: php 中header() 编码的作用   |   下一篇:php得到客户ip地址» 标签: php源码 php函数 编码转换

评论: