字符编码解码函数

escape() 函数可对字符串进行编码,那样就足以在具备的微管理器上读取该字符串。

运用js对U奥迪Q5L中的汉字实行escape编码。 <a href="" onclick="window.open('product_list.php?p_sort='+escape('脚本之家'));">那样点击链接后的效时:
引用:
调换了如此的功效, 很举世瞩目用PHP的urldecode()大概base64_decode()是不恐怕反解的。
消除措施, 用PHP写多少个反解函数:

语法
escape(string)参数 描述
string 必须。要被转义或编码的字符串。

复制代码 代码如下:

返回值
已编码的 string 的别本。个中一些字符被替换到了十六进制的转义种类

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

function php教程escape($str)
{
         $sublen=strlen($str);
         $retrunstring="";
         for ($i=0;$i<$sublen;$i++)
         {
                  if(ord($str[$i])>=127)
                  {
                           $tmps教程tring=bin2hex(iconv("gb2312","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编码会自动转换来为UTF-8, 所以必需开展编码转变本领猎取准确的结果,不然会中文乱码。但万一应用UTF-8编码就无须这一步了。
代码如下:print iconv('utf-8', 'gb2312', js_unescape($_REQUEST['p_sort']));
到此大家就打响地反解了js的escape编码了。
如下:
除此以外小编找到个用PHP完成js的escape编码的函数:

unescape() 函数可对经过 escape() 编码的字符串举办解码。

复制代码 代码如下:

语法
unescape(string)参数 描述
string 必须。要解码或反转义的字符串。

function phpescape($str)
{        
$sublen=strlen($str);
      $retrunString="";        
for ($i=0;$i<$sublen;$i++)        
{                 
if(ord($str[$i])>=127)                 
{                          
$tmpString=bin2hex(iconv("gb2312","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;
}

返回值
string 被解码后的贰个别本。

在json中不援救汉语,用它传送中文数据就能够油不过生数量遗失只怕乱码,必需在传 送前对要发送的字符串实行编码,由于传送过去亟待用js实行多少解析,思量到js中有unescape函数,故若在php中有个escape函数,对数据 实行编码,在客商端用unescape举办 解码,那样就能便利广大。
先在网络搜寻一把,非常多用php达成的escape函数,一模二样,比方下边一个:

说明
该函数的办事原理是这么的:通过找到方式为 %xx 和 %uxxxx 的字符类别(x 表示十六进制的数字),用 unicode 字符 u00xx 和 uxxxx 替换这样的字符体系进行解码。

复制代码 代码如下:

php处理

function phpEscape($str) {
preg_match_all("/[x80-xff].|[x01-x7f]+/",$str,$r);
$ar = $r[0];
foreach($ar as $k=>$v) {
    if(ord($v[0]) < 128)
      $ar[$k] = rawurlencode($v);
    else
      $ar[$k] = "%u".bin2hex(iconv("GB2312","UCS-2",$v));
}
return join("",$ar);
}

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

本条函数能够很好的劳作,不过,也可以有新手不驾驭那些函数的准绳(譬喻小编),用起来总是不放心,今后自家就来解释一下那么些函数的规律。并且小编觉着,拿外人的代码来复用,好比站在了受中国人民保险公司养的人的肩膀上,但是若不理解别人的代码,迟早要掉到地面上。
第一句:preg_match_all("/[x80-xff].|[x01-x7f]+/",$str,$r);那几个是用正则表达式相称字符串中全部的字符,[x80-xff]. 相配的是汉字,x表示相称字符的16进制编码,[ ] 是类选择符,“.” 表示率性贰个字符,那样[x80-xff].般配的是七个字符,在那之中第一个正是16进制从80到ff的字符,而那正好正是汉字编码的率先个字符。那样 就会完整的相称四其中华夏族民共和国字。关于unicode中汉字的编码,我们能够到英特网搜寻一下。同理,[x01-x7f]+斯洛伐克共和国(The Slovak Republic)语字符串,因为最初的德文是 ASCII编码,编码值小于128,也正是16进制的从01到7f,"+"表示一个或许多个字符,那样[x01-x7f]+就能够合营三回九转八个德语字符 串。

复制代码 代码如下:

$ar = $r[0];             //$r[0]里寄放是特别到的数组
foreach($ar as $k=>$v) {
    if(ord($v[0]) < 128)                 //假如字符编码值小于128,表达是个英语字符
      $ar[$k] = rawurlencode($v);    //直接用rawurlencode编码
    else
      $ar[$k] = "%u".bin2hex(iconv("GB2312","UCS-2",$v));    //不然的话用iconv函数把汉字调换成ucs-2编码,也正是unicode编码
}

在javascript中就能够用unescape来解码了
u0391-uFFE5 和u4e00-u9fa5来同盟粤语
但看似前面二个带有汉字下的A-¥等 前者或者是纯汉字。
其间解码函数为:

复制代码 代码如下:

function unescape($str) {
         $str = rawurldecode($str);
         preg_match_all("/%u.{4}|.{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) == "")
                           $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);
}

**一、编码范围

  1. GBK (GB2312/GB18030)
    x00-xff   GBK双字节编码范围
    x20-x7f   ASCII
    xa1-xff   中文
    x80-xff   中文
    2. UTF-8 (Unicode)
    u4e00-u9fa5 (中文)
    x3130-x318F (韩文
    xAC00-xD7A3 (韩文)
    u0800-u4e00 (日文)
    ps: 爱尔兰语是过量[u9fa5]的字符
    正则例子:
    **preg_replace("/([x80-xff])/","",$str);
    preg_replace("/([u4e00-u9fa5])/","",$str);

你大概感兴趣的篇章:

  • escape unescape的php下的兑现方式
  • php utf-8转unicode的函数
  • php escape URL编码
  • php 正确解码javascript中经过escape编码后的字符
  • php UTF-8、Unicode和BOM问题
  • PHP下escape解码函数的兑现形式
  • 在PHP中落到实处Javascript的escape()函数代码
  • PHP中正则表达式对UNICODE字符码的非常方法
  • 什么样使用PHP完成javascript的escape和unescape函数
  • 浅析PHP中的UNICODE 编码与解码
  • PHP函数addslashes和mysql_real_escape_string的区别
  • PHP解码unicode编码的汉语字符代码分享
  • PHP解密Unicode及Escape加密字符串

本文由365bet体育在线官网发布于关于计算机,转载请注明出处:字符编码解码函数

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。