www.gusucode.com > 仿51.com的php源码 1.1 > authpage/convertEncoding.php

    <?php
/*******************************
//GB转UTF-8编码
*******************************/
function gb2utf8($gbstr) {
    global $CODETABLE;
    if(trim($gbstr)=="") return $gbstr;
    if(empty($CODETABLE)){
        $filename = dirname(__FILE__)."/gb2312-utf8.table";
        $fp = fopen($filename,"r");
        while ($l = fgets($fp,15))
		{
			$CODETABLE[hexdec(substr($l, 0, 6))] = substr($l, 7, 6);
		}
		fclose($fp);
	}
    $ret = "";
    $utf8 = "";
    while ($gbstr) {
		if (ord(substr($gbstr, 0, 1)) > 127)
		{
			$thisW = substr($gbstr, 0, 2);
			$gbstr = substr($gbstr, 2, strlen($gbstr));
			$utf8 = "";
			@$utf8 = u2utf8(hexdec($CODETABLE[hexdec(bin2hex($thisW)) - 0x8080]));
			if($utf8!=""){
				for ($i = 0;$i < strlen($utf8);$i += 3)
					$ret .= chr(substr($utf8, $i, 3));
			}
		}
		else
		{
			$ret .= substr($gbstr, 0, 1);
			$gbstr = substr($gbstr, 1, strlen($gbstr));
		}
	}
	return $ret;
}
//Unicode转utf8
function u2utf8($c) {
	for ($i = 0;$i < count($c);$i++)
		$str = "";
	if ($c < 0x80) {
		$str .= $c;
	} else if ($c < 0x800) {
		$str .= (0xC0 | $c >> 6);
		$str .= (0x80 | $c & 0x3F);
	} else if ($c < 0x10000) {
		$str .= (0xE0 | $c >> 12);
		$str .= (0x80 | $c >> 6 & 0x3F);
		$str .= (0x80 | $c & 0x3F);
	} else if ($c < 0x200000) {
		$str .= (0xF0 | $c >> 18);
		$str .= (0x80 | $c >> 12 & 0x3F);
		$str .= (0x80 | $c >> 6 & 0x3F);
		$str .= (0x80 | $c & 0x3F);
	}
	return $str;
} 
?>