`
化蝶自在飞
  • 浏览: 2329550 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
社区版块
存档分类
最新评论

php中应用escape函数加密,JS中用unescape解密

    博客分类:
  • php
阅读更多
在json中不支持中文,用它传送中文数据就会出现数据丢失或者乱码,必须在传送前对要发送的字符串进行编码,由于传送过去需要用js进行数据解析,考虑到js中有unescape函数,故若在php中有个escape函数,对数据进行编码,在客户端用unescape进行 解码,这样就会方便很多。

先在网上搜索一把,很多用php实现的escape函数,大同小异
function phpescape($str){
    preg_match_all("/[\x80-\xff].|[\x01-\x7f]+/",$str,$newstr);
    $ar = $newstr[0];
    foreach($ar as $k=>$v){
        if(ord($ar[$k])>=127){
            $tmpString=bin2hex(iconv("GBK","ucs-2",$v));
            if (!eregi("WIN",PHP_OS)){
                $tmpString = substr($tmpString,2,2).substr($tmpString,0,2);
            }
            $reString.="%u".$tmpString;
        } else {
            $reString.= rawurlencode($v);
        }
    }
    return $reString;
}

这个函数可以很好的工作,但是,也许有新手不理解这个函数的原理(比如我),用起来总是不放心,现在我就来解释一下这个函数的原理。而且我认为,拿别人的代码来复用,好比站在了巨人的肩膀上,但是若不理解别人的代码,迟早要掉到地面上。

第一句:preg_match_all("/[\x80-\xff].|[\x01-\x7f]+/",$str,$r);这个是用正则表达式匹配字符串中所有的字符,[\x80-\xff]. 匹配的是汉字,\x表示匹配字符的16进制编码,[ ] 是类选择符,“.” 表示任意一个字符,这样[\x80-\xff].匹配的是两个字符,其中第一个就是16进制从80到ff的字符,而这恰好就是汉字编码的第一个字符。这样就能完整的匹配一个汉字。关于unicode中汉字的编码,大家可以到网上搜索一下。同理,[\x01-\x7f]+英文字符串,因为最早的英文是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编码
  }


这个就是关于php中escape函数的一个实现,欢迎大家补充

有时候可能会遇到PHP版本不同,导致出来结果不同,以致于乱码
下面这个备用

php提供的URL编码函数是基于字节的,对由ie的javascript函数escape编码的数据就无能为力了。
因此在此共享本人的php版的escape/unescape函数

一个加密一个解密的:

function escape($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})|.+/",$str,$r);
  $ar = $r[0];
  foreach($ar as $k=>$v) {
    if(substr($v,0,2) == "%u" && strlen($v) == 6)
      $ar[$k] = iconv("UCS-2","GB2312",pack("H4",substr($v,-4)));
  }
  return join("",$ar);
}

分享到:
评论

相关推荐

    Escape加密-UnEscape解密

    Escape加密-UnEscape解密 每一位站长必备的好工具,精而巧!

    asp函数实现javascript里的escape函数和unescape函数功能

    JavaScript 中提供了 `escape` 和 `unescape` 函数来实现这一目标。然而,在ASP(Active Server Pages)环境中,这些函数并不可用。因此,为了兼容性和跨平台需求,有时我们需要在ASP中手动实现这些功能。 #### ...

    java版本的escape和unescape函数

    在Java编程语言中,`escape`和`unescape`函数是处理字符串时常见的工具,尤其在处理HTML、JavaScript或URL编码时。这两个函数主要用于在字符串中转换特殊字符,确保数据在网络传输或存储时的正确性和安全性。下面...

    JavaScript代码加密与解密方法剖析.pdf

    使用 unescape() 函数可以对加密后的 JavaScript 代码进行解密。例如: var decryptedCode = unescape(encryptedCode); (2)使用 Base64 解码 使用 Base64 解码可以对加密后的 JavaScript 代码进行解密。例如: ...

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

    在JavaScript中,`escape`和`unescape`是两个用于编码和解码字符串的函数。它们主要用于处理非ASCII字符,特别是在网络传输时确保数据的正确性。然而,PHP并没有直接对应的内置函数,但可以通过自定义函数来实现类似...

    js中的escape及unescape函数的php实现代码.docx

    在JavaScript中,`escape()`和`unescape()`函数是用来处理字符串的编码和解码的。它们在处理URL编码和特定字符编码时非常有用。然而,PHP并没有直接等效的内置函数,但我们可以根据其功能编写相应的PHP实现。下面将...

    易语言Escape加解密

    在JavaScript或者其他编程语言中,Escape函数用于将特定的字符转换为它们的Unicode转义序列,这样可以确保字符串在网络传输或存储时不会因为特殊字符导致问题。例如,空格会转换为"%20","&"会转换为"%26"等。这个...

    unescape()解密[转载]

    这是一个网页文件,运行后把escape加密的部分粘贴进去后点解密就可以还原成html源代码,也可以对html代码加密,集加密解密于一身

    js DES加密、解密支持中文

    在这个场景中,我们将讨论如何在JavaScript中实现DES加密和解密,并且确保其能正确处理中文字符。 DES加密算法是一种块加密算法,它使用64位的密钥对64位的数据块进行操作。虽然原始的DES已经有些过时,因为它只有...

    PHP函数库,PHP函数大全,PHP函数实例,PHP函数手册,PHP5函数库实例

    模仿JAVASCRIPT的ESCAPE和UNESCAPE函数的功能 用curl函数读取远程文件 用file_getcontents提交数据 用php生成扭曲,有角度的验证图片(支持中文) 用正则加亮关键字 程序运行过程中直接输出 缩略图带版权信息...

    js加密、解密、编码等工具合集

    JavaScript是一种广泛应用于网页和网络应用的脚本语言,它的强大之处在于可以处理用户交互、操作DOM、进行数据交换以及执行各种安全操作,如加密、解密和编码。在这个"js加密、解密、编码等工具合集"中,包含三个...

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

    在JavaScript中,`escape`和`unescape`函数是用来对字符串进行编码和解码的,主要是为了处理非ASCII字符。然而,在PHP中,没有直接对应的内置函数。但是,通过自定义函数,我们可以模拟这些功能。这里我们将深入探讨...

    java实现js的escape和unescape

    下面,我们将深入探讨如何在Java中实现JavaScript的`escape()`和`unescape()`方法,以及它们的具体工作原理和应用。 ### Java实现JS的`escape`和`unescape`方法 #### `escape`方法:URL编码 在JavaScript中,`...

    JavaScript escape/unescape 编码的 Java 实现

    本工具类用java实现了JavaScript escape/unescape 编码。对接建行支付以及需要向后端传输中文数据时可以使用得到

    android 实现JavaScript escape unescape

    输入样例: String stest = "中文1234 abcd[](),.~\\";...System.out.println(unescape(escape(stest))); 输出结果: 中文1234 abcd[](),.~\ %u4E2D%u65871234+abcd%5B%5D()%3C%2B%3E%2C.~%5C 中文1234 abcd[](),.~\

    js escape,unescape解决中文乱码问题的方法.docx

    JavaScript中的`escape`和`unescape`函数是处理字符串编码和解码的两个关键方法,尤其是在处理包含非ASCII字符(如中文字符)的字符串时。这两个函数在处理字符串时遵循特定的规则,对于理解JavaScript字符串编码...

    ASP常用加密解密方法

    本文将详细介绍ASP中常用的加密解密方法,包括ASP、HTML、JavaScript(JS)和VBScript(VBS)的编码与反编码,以及简易的ASP加密解密小程序的应用。 首先,ASP中的加密通常涉及到字符串的哈希处理和对称加密。哈希...

    PHP实现JS中escape与unescape的方法

    首先,本文主要讲述了在PHP中实现JavaScript中escape和unescape函数功能的方法。JavaScript中的escape函数可以将字符串转换为unicode十六进制编码,而unescape函数则可以将这种编码转换回原始字符串。由于JSON的编码...

    JavaScript加密解密的七种方法

    JavaScript加密解密技术是网页开发中保护代码不被轻易复制的一种策略。虽然JavaScript代码在浏览器中执行,使得绝对保密变得困难,但是通过各种加密手段,可以增加破解的难度。以下介绍七种JavaScript加密方法: 1....

    解析php中的escape函数

    以上内容详细介绍了PHP中的escape函数及其应用场景,包括如何处理JS中URL的特殊编码和在JSON数据交互中的编码问题。通过自定义函数的实现,文章还展示了如何在PHP中进行编码,以及如何正确地反解编码。这对于需要在...

Global site tag (gtag.js) - Google Analytics