知识大全 解析php中的escape函数

Posted 函数

篇首语:存储阳光,必有远芳;心中有暖,又何惧人生荒凉。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 解析php中的escape函数相关的知识,希望对你有一定的参考价值。

  采用js对URL中的汉字进行escape编码 <a href="" onclick="window open( product_list php?p_sort= +escape( 脚本之家 ));">这样点击链接后的效时 引用%u F %u D %u D %u E %u F 生成了这样的效果 很明显用PHP的urldecode()或者base _decode()是无法反解的 解决方法 用PHP写一个反解函数

复制代码 代码如下: function js_unescape($str) $ret = ; $len = strlen($str); for ($i = ; $i < $len; $i++) if ($str[$i] == % && $str[$i+ ] == u ) $val = hexdec(substr($str $i+ )); if ($val < x f) $ret = chr($val); else if($val < x ) $ret = chr( xc |($val>> )) chr( x |($val& x f)); else $ret = chr( xe |($val>> )) chr( x |(($val>> )& x f)) chr( x |($val& x f)); $i += ; else if ($str[$i] == % ) $ret = urldecode(substr($str $i )); $i += ; else $ret = $str[$i]; return $ret;

   注意JS编码会自动转换成为UTF 所以必须进行编码转换才能得到正确的结果 否则会中文乱码 但如果使用UTF- 编码就不用这一步了 代码如下 print iconv( utf gb js_unescape($_REQUEST[ p_sort ])); 到此我们就成功地反解了js的escape编码了 如下 另外我找到个用PHP实现js的escape编码的函数

复制代码 代码如下: function phpescape($str) $sublen=strlen($str); $retrunString=""; for ($i= ;$i<$sublen;$i++) if(ord($str[$i])>= ) $tmpString=bin hex(iconv("gb " "ucs " substr($str $i ))); //$tmpString=substr($tmpString ) substr($tmpString );window下可能要打开此项 $retrunString ="%u" $tmpString; $i++; else $retrunString ="%" dechex(ord($str[$i])); return $retrunString;

   在 json中不支持中文 用它传送中文数据就会出现数据丢失或者乱码 必须在传 送前对要发送的字符串进行编码 由于传送过去需要用js进行数据解析 考虑到js中有unescape函数 故若在php中有个escape函数 对数据 进行编码 在客户端用unescape进行 解码 这样就会方便很多 先在网上搜索一把 很多用php实现的escape函数 大同小异 比如下面一个

复制代码 代码如下: function phpEscape($str) preg_match_all("/[x xff] |[x x f]+/" $str $r); $ar = $r[ ]; foreach($ar as $k=>$v) if(ord($v[ ]) < ) $ar[$k] = rawurlencode($v); else $ar[$k] = "%u" bin hex(iconv("GB " "UCS " $v)); return join("" $ar);

   这个函数可以很好的工作 但是 也许有新手不理解这个函数的原理(比如我) 用起来总是不放心 现在我就来解释一下这个函数的原理 而且我认为 拿别人的代码来复用 好比站在了巨人的肩膀上 但是若不理解别人的代码 迟早要掉到地面上 第一句 preg_match_all("/[x xff] |[x x f]+/" $str $r);这个是用正则表达式匹配 字符串中所有的字符 [x xff] 匹配的是汉字 x表示匹配字符的 进制编码 [ ] 是类选择符 “ ” 表示任意一个字符 这样[x xff] 匹配的是两个字符 其中第一个就是 进制从 到ff的字符 而这恰好就是汉字编码的第一个字符 这样 就能完整的匹配一个汉字 关于unicode中汉字的编码 大家可以到网上搜索一下 同理 [x x f]+英文字符串 因为最早的英文是 ASCII编码 编码值小于 也就是 进制的从 到 f "+"表示一个或者多个字符 这样[x x f]+就能匹配连续多个英文字符 串

复制代码 代码如下: $ar = $r[ ]; //$r[ ]里存放是匹配到的数组 foreach($ar as $k=>$v) if(ord($v[ ]) < ) //假如字符编码值小于 说明是个英文字符 $ar[$k] = rawurlencode($v); //直接用rawurlencode编码 else $ar[$k] = "%u" bin hex(iconv("GB " "UCS " $v)); //否则的话用iconv函数把汉字转变成ucs 编码 也就是unicode编码

   在javascript中就可以用unescape来解码了 u uFFE 和u e u fa 来匹配中文 但好像前者包含汉字下的A ¥等 后者可能是纯汉字 其中解码函数为

复制代码 代码如下: function unescape($str) $str = rawurldecode($str); preg_match_all("/%u |&#x ;|&#d+;| +/U" $str $r); $ar = $r[ ]; foreach($ar as $k=>$v) if(substr($v ) == "%u") $ar[$k] = iconv("UCS " "GBK" pack("H " substr($v ))); elseif(substr($v ) == "&#x") $ar[$k] = iconv("UCS " "GBK" pack("H " substr($v ))); elseif(substr($v ) == "&#") $ar[$k] = iconv("UCS " "GBK" pack("n" substr($v ))); return join("" $ar); cha138/Article/program/PHP/201311/21103

相关参考

知识大全 解析PHP函数array

解析PHP函数array  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  我们都知道PHP中的数组

知识大全 解析php函数method

php函数method_exists()与is_callable()的区别在哪?在php面相对象设计过程中往往我们需要在调用某一个方法是否属于某一个类的时候做出判断常用的方法有method_exist

知识大全 基于PHP中的常用函数回顾

基于PHP中的常用函数回顾  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!以下是对PHP中的常用函数

知识大全 php连接函数implode与分割explode的深入解析

  目前学习php的人有很多很多进行php培训的朋友在学习中总会问到这样一个问题:php连接函数implode是什么呢?php可以将字符串分割成数组同时翻过了也可以将数组连接成字符串确切的说是可以将数

知识大全 解析php下载远程图片函数 可伪造来路

复制代码代码如下:<?phpfunctionDownImageKeep($gurl$rfurl$filename$gcookie=""$JumpCount=$maxtime=)$urlinfos

知识大全 解析如何通过PHP函数获取当前运行的环境 来进行判断执行逻辑

解析如何通过PHP函数获取当前运行的环境来进行判断执行逻辑  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一

知识大全 javascript中的escape是什么意思

  escape是什么意思?  escape采用ISOLatin字符集对指定的字符串进行编码所有的空格符标点符号特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集

知识大全 PHP 获取文件权限函数介绍

PHP获取文件权限函数介绍  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!以下是对PHP中的获取文件

知识大全 php打开文件fopen函数的使用说明

本篇文章是对php中的打开文件fopen函数的使用进行了详细的分析介绍需要的朋友参考下   resource fopen(string $filenamestring$m

知识大全 关于php 接口问题(php接口主要也就是运用curl,curl函数)

本篇文章是对php中的接口问题(php接口主要也就是运用curlcurl函数)进行了详细的分析介绍需要的朋友参考下   接口问题php调用接口最主要的就是使用curl抓取信息复制代码代码如下