PHP对escape的字符串进行解密

作者:小文 发布于:2010-8-28 12:53 Saturday 分类:其它资源

Escape是js 脚本的一种加密字符串的方式.具体详情可以参见http://www.w3school.com.cn/js/jsref_unescape.asp

有的网站会将中文字进行Escape编码,然后在显示时用unescape再进行转换.比如有这么一段代码

<title>广州公交查询-由%u91D1%u6CFD%u5927%u53A6到%u767E%u5F81%u79D1%u6280%u5927%u53A6的乘车路线</title>

这个是经过Escape编码的.我们需要在PHP中将其解密.在网上搜索后,得到加密和解密代码.

<?php

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);
}

function phpescape($str){//这个是加密用的
    preg_match_all("/[\x80-\xff].|[\x01-\x7f]+/",$str,$newstr);
    $ar = $newstr[0];
    foreach($ar as $k=>$v){
        if(ord($ar[$k])>=127){
            $tmpString=bin2hex(iconv("GBK","ucs-2",$v));
            if (!eregi("WIN",PHP_OS)){
                $tmpString = substr($tmpString,2,2).substr($tmpString,0,2);
            }
            $reString.="%u".$tmpString;
        } else {
            $reString.= rawurlencode($v);
        }
    }
    return $reString;
}

?>

我们测试一下

echo unescape("由%u91D1%u6CFD%u5927%u53A6到%u767E%u5F81%u79D1%u6280%u5927%u53A6的乘车路线");

可以得到  由金泽大厦到百征科技大厦的乘车路线

标签: escape unescape php

评论:

www.120center.com
2013-08-17 14:23
怎么把它弄进PHP插件里去应用呢?为什么没有更详细的使用方法
小文
2013-08-19 10:34
@www.120center.com:这些最基本的php知识,需要用户自行解决。
www.ad-mart.cn
2011-09-22 09:10
一点点的来学习这个!
young
2010-08-31 15:43
谢谢小文,小文辛苦了。

发表评论:

Powered by emlog