怎么把网页实体字符串如 贸易经这样的字符串转化为普通GB2312的字符串,我需要在程序里面处理。
---------------------------------------------------------------
正解
------------------------------------------------------------
$v) {
if(substr($v,0,2) == "%u")
$ar[$k] = iconv("UCS-2","GBK",pack("H4",substr($v,-4)));
elseif(substr($v,0,3) == "&#x")
$ar[$k] = iconv("UCS-2","GBK",pack("H4",substr($v,3,-1)));
elseif(substr($v,0,2) == "&#") {
$ar[$k] = iconv("UCS-2","GBK",pack("n",preg_replace("/[^\d]/","",$v)));
}
}
return join("",$ar);
}
echo unescape('贸易经'); //out 贸易经
?>
\--------------------------------------------------------------------------------------
“源代码仍然是这些数字代码”???
呵呵,楼主的iconv不支持 UCS-2 编码?可见你的php版本太低了!
常见的unicode编码的ascii表示有以下几种
%uhhhh
&#xhhhh;
&#ddddd;
其中:h 十六进制数;d 十进制数
通常以“;”作为编码串的结束符,对于ie6以下的浏览器“;”是不能缺少的
无论是用十六进制还是十进制表示,他们都是unicode的编码值。一个短整型数(占两个字节)
说句不好听的话,楼主的u2utf82gb($c)还是本人的作品。居然被拿来作为攻击我的武器啦。可见“为人须留三分意,不可全抛一片心”是多么正确的了
\------------------------------------------------------------------------------
不过,不明白中间的转换有什么用,以下的代码也输出贸易经
function unescape($str) {
$str = rawurldecode($str);
return $str;
}
echo unescape('贸易经'); //out 贸易经
仅这样输出的还是:贸易经,只不过浏览器把他转换成“贸易经”显示,“源文件”中并没有变。因为rawurldecode并不处理这样的输入串
加入rawurldecode的原因可以从函数名(unescape)看出,他是一个与js的unescape完全等效的函数
unicode的都是两个字节,为什么php的utf-8编码是三个字节。
因为编码规则不同嘛
utf-8编码是一到八个字节,汉字的utf-8编码多是三个字节,但也有两个和四个字节的