思路话语

。Arlen:思想有多远你就能走多远...

php 中英文混编并且中文是十六进制 unicode 的字符串的解码方案

到网上找到一段十进制unicode串的解码方案,我发挥了下,把十六进制的解码也给解决了:

英文和十六进制中文混编的:

 

代码
function conv($str)
    {
        
preg_match_all("/\\\\u.{4}|.+/U",$str,$r);
                
$ar = $r[0]; 
                
foreach($ar as $k=>$v)
                { 
                    
if(substr($v,0,2== "\\u")                
                        
$ar[$k= iconv("UCS-2","utf-8",pack("H4",substr($v,-4)));                         
                }
                
return join("",$ar); 
        
//return iconv("UCS-2","utf-8",pack("H4",$str));
    } 

 

 

 

网上的:

代码
<?php
        
/* 
        方法作用 :对应JS中的escape函数,即将字符串转换成%+十六进制数                
        
*/
        
function phpEscape($str
        { 
                
$sublen=strlen($str); 
                
$retrunString=""
                
for ($i=0;$i<$sublen;$i++
                { 
                        
if(ord($str[$i])>=127
                        { 
                                
$tmpString=bin2hex(iconv("utf-8","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
        }

        
/* 
        方法作用 :对应JS中的unescape函数,%+十六进制数转换成中文字符                      
        
*/
        
function phpUnescape($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","utf-8",pack("H4",substr($v,-4))); 
                        
elseif(substr($v,0,3== "&#x")        $ar[$k= iconv("UCS-2","utf-8",pack("H4",substr($v,3,-1))); 
                        
elseif(substr($v,0,2== "&#")        $ar[$k= iconv("UCS-2","utf-8",pack("n",substr($v,2,-1)));
                }
                
return join("",$ar); 
        }
?>

 

 

posted on 2010-03-17 17:38  Arlen  阅读(885)  评论(0)    收藏  举报

导航