兼容PHP5.2低版本的UTF-8转GB编码

作者:九佰佬 发表于:2022-05-22
//UTF-8 转 GB 编码
	function utf_gb($utfstr)
	{
		if(function_exists('iconv'))
		{
			return @iconv('utf-8','gbk//ignore',$utfstr);
		}
		if(trim($utfstr)=="")
		{
			return $utfstr;
		}
		
		//定义静态变量,下次执行不再读取
		static $UC2GBTABLE = "";
		
		if(empty($UC2GBTABLE))
		{
			//数据文件路径
			!is_file(dirname(__FILE__)."/gb2312-utf8.dat") && error("不存在的编码文件表:/".dirname(__FILE__)."/gb2312-utf8.dat");
			$filename = dirname(__FILE__)."/gb2312-utf8.dat";
			$fp = fopen($filename,"r");
			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 = utf82u($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;
	}


涉及到的编码文件(解压)

gb2312-utf8.zip




版权声明

本文仅代表作者观点,不代表XX立场。
本文系作者授权百度百家发表,未经许可,不得转载。

分享:

扫一扫在手机阅读、分享本文

请发表您的评论