设为首页收藏本站

全球主机交流论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: discuz
查看: 989|回复: 1
打印 上一主题 下一主题

PHP的escape函数的实现方法

[复制链接]
  • TA的每日心情
    奋斗
    2016-9-4 22:05
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    跳转到指定楼层
    楼主
    发表于 2014-9-16 18:27:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    很多时候需要用到js的escape函数来转换中文字符,可是用js转换后的字符怎么用php来转换回来呢,下面我就找到了两个很实用的函数。
    GB2312编码:
    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);
    }



    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
    收藏收藏
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-9-4 22:05
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    沙发
     楼主| 发表于 2014-9-16 18:27:35 | 只看该作者
    UTF8编码:
    function unescape($str){
            $ret = '';
            $len = strlen($str);

            for ($i = 0; $i < $len; $i++){
                    if ($str[$i] == '%' && $str[$i+1] == 'u'){
                            $val = hexdec(substr($str, $i+2, 4));

                            if ($val < 0x7f) $ret .= chr($val);
                            else if($val < 0x800) $ret .= chr(0xc0|($val>>6)).chr(0x80|($val&0x3f));
                            else $ret .= chr(0xe0|($val>>12)).chr(0x80|(($val>>6)&0x3f)).chr(0x80|($val&0x3f));

                            $i += 5;
                    }
                    else if ($str[$i] == '%'){
                            $ret .= urldecode(substr($str, $i, 3));
                            $i += 2;
                    }
                    else $ret .= $str[$i];
            }
            return $ret;
    }
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|小黑屋|Archiver|手机版|中国U网    

    GMT+8, 2024-5-1 04:10 , Processed in 0.076223 second(s), 22 queries .

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表