刚刚遇到的问题
试了半天,也找了一下,ms网上的解决方案都不行
csdn上面也有差不多的问题,但是貌似说不出个所以然来
刚开始,以为跟php中用urlencode加密的差不多,想直接用urldecode(),但是还是输出乱码...
网上也有人说可以这样处理,不知道他们是怎么实现的,反正俺这里就不行
搜索了一下,发现了两个函数,比较多人介绍
| 代码: [Copy to clipboard] |
<?
function phpescape($str)
{
$sublen=strlen($str);
$retrunString="";
for ($i=0;$i<$sublen;$i++)
{
if(ord($str[$i])>=127)
{
$tmpString=bin2hex(iconv("gb2312","ucs-2",substr($str,$i,2)));
//$tmpString=substr($tmpString,2,2).substr($tmpString,0,2);window下可能要打开此项
$retrunString.="%u".$tmpString;
$i++;
} else {
$retrunString.="%".dechex(ord($str[$i]));
}
}
return $retrunString;
}
function unescape($str) {
$str = rawurldecode($str);
preg_match_all("/%u.{4}|&#x.{4};|&#\d+;|.+/U",$str,$r);
$ar = $r[0];
foreach($ar as $k=>$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",substr($v,2,-1)));
}
}
return join("",$ar);
}
?>
|
试了一下,直接用unescape,还是一样的结果....
突然,发现输出的字符,有点跟utf8一样,试着转了一下,
居然可以了
再找了一下,在phpx上面居然有这么一句:
js中的采用的UTF8的编码,所以在PHP解码之后也不能直接拿来使用,应该转一下码。
这样就应该没错了,如果他们都是用utf8的 基本都不用转义的,直接用urldecode或者上面的函数就可以了......
夜了,睡觉了.
|