PHP的escape函数的实现方法

很多时候需要用到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);
}

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

【本站遵守CC协议,转载本站文章请注明原文地址和原作者,谢谢】

Tags: , , | 303 views

2 Responses to “PHP的escape函数的实现方法”


  1. 不是jsp 方便, java.net.URLEncoder.encode(“xxxx”,”字符集”) .sun 都给封装好了!


  2. 正在学这个,可就是学不会,不过还是支持下!

Leave a Reply