php教程

超轻量级php框架startmvc

PHP实现Javascript中的escape及unescape函数代码分享

更新时间:2020-03-02 21:24:54 作者:startmvc
这个类相当好用.作用么,PHP做JSON传递GBK字符,比如中文,日文,韩文神马的Unicode最合适不过了..

这个类相当好用.作用么,PHP做JSON传递GBK字符,比如中文,日文,韩文神马的Unicode最合适不过了..


<?php
classcoding
{
 //模仿JAVASCRIPT的ESCAPE和UNESCAPE函数的功能 
 functionunescape($str)
 {
 $text=preg_replace_callback("/%u[0-9A-Za-z]{4}/",array(
 &$this,
 'toUtf8'
 ),$str);
 returnmb_convert_encoding($text,"gb2312","utf-8");
 }
 
 functiontoUtf8($ar)
 {
 foreach($aras$val){
 $val=intval(substr($val,2),16);
 if($val<0x7F){// 0000-007F 
 $c.=chr($val);
 }elseif($val<0x800){// 0080-0800 
 $c.=chr(0xC0|($val/64));
 $c.=chr(0x80|($val%64));
 }else{// 0800-FFFF 
 $c.=chr(0xE0|(($val/64)/64));
 $c.=chr(0x80|(($val/64)%64));
 $c.=chr(0x80|($val%64));
 }
 }
 return$c;
 }
 
 functionescape($string,$encoding='gb2312')
 {
 $return='';
 for($x=0;$x<mb_strlen($string,$encoding);$x++){
 $str=mb_substr($string,$x,1,$encoding);
 if(strlen($str)>1){// 多字节字符 
 $return.='%u'.strtoupper(bin2hex(mb_convert_encoding($str,'UCS-2',$encoding)));
 }else{
 $return.='%'.strtoupper(bin2hex($str));
 }
 }
 return$return;
 }
 
 functiongb2utf8($string,$encoding='utf-8',$from_encode='gb2312')
 {
 returnmb_convert_encoding($string,$encoding,$from_encode);
 }
 
}
?>

google code 上找到的另外一个类似脚本


<?php
 
 functionphpescape($str)
 {
 $sublen=strlen($str);
 $retrunString="";
 for($i=0;$i<$sublen;$i++)
 {
 if(ord($str[$i])>=127)
 {
 $tmpString=bin2hex(iconv("gbk","ucs-2",substr($str,$i,2)));
 $tmpString=substr($tmpString,2,2).substr($tmpString,0,2);
 $retrunString.="%u".$tmpString;
 $i++;
 }else{
 $retrunString.="%".dechex(ord($str[$i]));
 }
 }
 return$retrunString;
 }
 
 
 functionescape($str)
 {
 preg_match_all("/[\x80-\xff].|[\x01-\x7f]+/",$str,$r);
 $ar=$r[0];
 foreach($aras$k=>$v)
 {
 if(ord($v[0])<128)
 $ar[$k]=rawurlencode($v);
 else
 $ar[$k]="%u".bin2hex(iconv("UTF-8","UCS-2",$v));
 }
 returnjoin("",$ar);
 }
 
 functionphpunescape($source)
 {
 $decodedStr="";
 $pos=0;
 $len=strlen($source);
 
 while($pos<$len)
 {
 $charAt=substr($source,$pos,1);
 if($charAt=='%')
 {
 $pos++;
 $charAt=substr($source,$pos,1);
 if($charAt=='u')
 {
 // we got a unicode character 
 $pos++;
 $unicodeHexVal=substr($source,$pos,4);
 $unicode=hexdec($unicodeHexVal);
 $entity="&#".$unicode.';';
 $decodedStr.=utf8_encode($entity);
 $pos+=4;
 }else{
 // we have an escaped ascii character 
 $hexVal=substr($source,$pos,2);
 $decodedStr.=chr(hexdec($hexVal));
 $pos+=2;
 }
 }else{
 $decodedStr.=$charAt;
 $pos++;
 }
 }
 return$decodedStr;
 }
 
 
 functionunescape($str)
 {
 $str=rawurldecode($str);
 preg_match_all("/(?:%u.{4})|&#x.{4};|&#\d+;|.+/U",$str,$r);
 $ar=$r[0];
 #print_r($ar);
 foreach($aras$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)=="&#")
 {
 //echo substr($v,2,-1)."";
 $ar[$k]=iconv("UCS-2","UTF-8",pack("n",substr($v,2,-1)));
 }
 }
 returnjoin("",$ar);
 }
 
?>