PHP解密Unicode及Escape加密字符串

本文给大家分享一个PHP解密Unicode及Escape加密字符串函数

<?php
function uni_decode($s) {
  preg_match_all('/\&\#([0-9]{2,5})\;/', $s, $html_uni);
  preg_match_all('/[\\\%]u([0-9a-f]{4})/ie', $s, $js_uni);
  $source = array_merge($html_uni[0], $js_uni[0]);
  $js = array();
  for($i=0;$i<count($js_uni[1]);$i++) {
    $js[] = hexdec($js_uni[1][$i]);
  }
  $utf8 = array_merge($html_uni[1], $js);
  $code = $s;
  for($j=0;$j<count($utf8);$j++) {
    $code = str_replace($source[$j], unicode2utf8($utf8[$j]), $code);
  }
  return $code;//$s;//preg_replace('/\\\u([0-9a-f]{4})/ie', "chr(hexdec('\\1'))", $s);
}  

function unicode2utf8($c) {
  $str="";
  if ($c < 0x80) {
     $str.=chr($c);
  } else if ($c < 0x800) {
     $str.=chr(0xc0 | $c>>6);
     $str.=chr(0x80 | $c & 0x3f);
  } else if ($c < 0x10000) {
     $str.=chr(0xe0 | $c>>12);
     $str.=chr(0x80 | $c>>6 & 0x3f);
     $str.=chr(0x80 | $c & 0x3f);
  } else if ($c < 0x200000) {
     $str.=chr(0xf0 | $c>>18);
     $str.=chr(0x80 | $c>>12 & 0x3f);
     $str.=chr(0x80 | $c>>6 & 0x3f);
     $str.=chr(0x80 | $c & 0x3f);
  }
  return $str;
}  

$str='%u5927%u5BB6%u597D%uFF0C我是孤魂!<br />\u8FD9\u662F\u6D4B\u8BD5\u6587\u672C\uFF01';
echo uni_decode($str); // 大家好,我是孤魂!这是测试文本!

在网上搜索一把,很多用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;
} 

以上所述就是本文的全部内容了,希望大家能够喜欢。

(0)

相关推荐

  • php mysql_real_escape_string addslashes及mysql绑定参数防SQL注入攻击

    php mysql_real_escape_string addslashes及mysql绑定参数防SQL注入攻击 php防止SQL注入攻击一般有三种方法: 使用mysql_real_escape_string函数 使用addslashes函数 使用mysql bind_param() 本文章向大家详细介绍这三个方法在防止SQL注入攻击中的效果及区别. mysql_real_escape_string防sql注入攻击 mysql_real_escape_string() 函数转义 SQL 语句中

  • js中编码函数:escape,encodeURI与encodeURIComponent详解

    1.eacape(): 该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ - _ + . / .其他所有的字符都会被转义序列替换.其它情况下escape,encodeURI,encodeURIComponent编码结果相同. escape对0-255以外的unicode值进行编码时输出%u****格式 可以使用 unescape() 对 escape() 编码的字符串进行解码. ECMAScript v3 反对使用该方法,应用使用 decod

  • Java实现JS中的escape和UNescape代码分享

    众所周知,JavaScript中escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串.下面,我们就来看看 Java语言中类似JavaScript中的escape() 和unescape() 转码方法,具体代码如下: public class EscapeUnescape { public static String escape(String src) { int i; char j; StringBuffer tmp = new StringBuffer(); tm

  • js中字符串编码函数escape()、encodeURI()、encodeURIComponent()区别详解

    JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数: unescape,decodeURI,decodeURIComponent . 下面简单介绍一下它们的区别 1 escape()函数 定义和用法 escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串. 语法 escape(string) 参数 描述 string 必需.要被转义或编码的字符串. 返回值 已编码的 st

  • mysql_escape_string()函数用法分析

    本文实例讲述了mysql_escape_string()函数用法.分享给大家供大家参考,具体如下: 使用 mysql_escape_string() 对查询中有疑问的数据进行编码: 有一些数据例如: char query(1024); sprintf (query, "select * from my_tbl where name = '%s'",name); 如果这个时候,name 中包含了如: "0'Malley,Brian" 这样的数据就会产生这样的查询语句:

  • SQL中使用ESCAPE定义转义符详解

    使用ESCAPE定义转义符 在使用LIKE关键字进行模糊查询时,"%"."_"和"[]"单独出现时,会被认为是通配符.为了在字符数据类型的列中查询是否存在百分号 (%).下划线(_)或者方括号([])字符,就需要有一种方法告诉DBMS,将LIKE判式中的这些字符看作是实际值,而不是通配符.关键字 ESCAPE允许确定一个转义字符,告诉DBMS紧跟在转义字符之后的字符看作是实际值.如下面的表达式: LIKE '%M%' ESCAPE 'M' 使用E

  • python对html代码进行escape编码的方法

    本文实例讲述了python对html代码进行escape编码的方法.分享给大家供大家参考.具体分析如下: python包含一个cgi模块,该模块有一个escape函数可以用来对html代码进行编码转换 import cgi s1 = "Hello <strong>world</strong>" s2 = cgi.escape(s1) assert s2 == "Hello <strong>world</strong>"

  • PHP解密Unicode及Escape加密字符串

    本文给大家分享一个PHP解密Unicode及Escape加密字符串函数 <?php function uni_decode($s) { preg_match_all('/\&\#([0-9]{2,5})\;/', $s, $html_uni); preg_match_all('/[\\\%]u([0-9a-f]{4})/ie', $s, $js_uni); $source = array_merge($html_uni[0], $js_uni[0]); $js = array(); for(

  • vue项目中 使用 pako.js 解密 gzip加密字符串的代码详解

    前言 今天跟后台对接一个接口,接受到一个加密的值,说是通过gzip加密过的,然后就蒙蔽了, 赶紧上百度找了一下资料,通过一篇文章(原文在底部)发现有个js库可以解密,就下载轻松解密了 实现代码 poko.js可至Github下载 https://github.com/nodeca/pako or npm install pako import pako from 'pako' // 一个是加密:window.btoa(),一个是解密:window.atob() function decode(e

  • vue中使用 pako.js 解密 gzip加密字符串的方法

    前言 今天跟后台对接一个接口,接受到一个加密的值,说是通过gzip加密过的,然后就蒙蔽了, 赶紧上百度找了一下资料,通过一篇文章(原文在底部)发现有个js库可以解密,就下载轻松解密了 实现代码 poko.js可至Github下载  https://github.com/nodeca/pako or npm install pako import pako from 'pako' // 一个是加密:window.btoa(),一个是解密:window.atob() function decode(

  • PHP中加密解密函数与DES加密解密实例

    本文实例讲述了PHP中加密解密函数与DES加密解密的应用,分享给大家供大家参考.具体如下: 例子,php加密解密的例子 加密函数: 复制代码 代码如下: /* *功能:对字符串进行加密处理 *参数一:需要加密的内容 *参数二:密钥 */ function passport_encrypt($str,$key){ //加密函数  srand((double)microtime() * 1000000);  $encrypt_key=md5(rand(0, 32000));  $ctr=0;  $t

  • JAVA 中解密RSA算法JS加密实例详解

    JAVA 中解密RSA算法JS加密实例详解 有这样一个需求,前端登录的用户名密码,密码必需加密,但不可使用MD5,因为后台要检测密码的复杂度,那么在保证安全的前提下将密码传到后台呢,答案就是使用RSA非对称加密算法解决 . java代码 需要依赖 commons-codec 包 RSACoder.Java import org.apache.commons.codec.binary.Base64; import javax.crypto.Cipher; import java.security.

  • iOS中使用MD5加密字符串

    1,新建NSString的分类,记得添加加密所需的头文件#import <CommonCrypto/CommonDigest.h> , NSString+MD5.h: #import <Foundation/Foundation.h> #import <CommonCrypto/CommonDigest.h> @interface NSString (MD5) + (NSString *)md5To32bit:(NSString *)str; @end 2,编写加密方法

  • 利用PHP脚本在Linux下用md5函数加密字符串的方法

    #touch a.php //创建a.php文件 #vi a.php //用vi 编辑a.php文件 将<?php echo md5(123456); ?>输入进去后保存 #php a.php //运行a.php文件 显示:e10adc3949ba59abbe56e057f20f883e A.在linux或Unix上,md5sum是用来计算和校验文件报文摘要的工具程序.一般来说,安装了Linux后,就会有md5sum这个工具,直接在命令行终端直接运行.可以用下面的命令来获取md5sum命令帮助

  • C#将Unicode编码转换为汉字字符串的简单方法

    C# 将js中的UNICODE转换为字符串,网上找的都不行,遇到有数字的转不出来,稍稍改了点,OK了! 实例如下: /// 将Unicode编码转换为汉字字符串 /// /// Unicode编码字符串 /// 汉字字符串 public static string ToGB2312(string str) { MatchCollection mc = Regex.Matches(str, "([\\w]+)|(\\\\u([\\w]{4}))"); if (mc != null &am

  • python 异或加密字符串的实例

    做个简单习题:输入明文给定秘钥,密文还原,按位异或处理. import base64 as b64 def xor_encrypt(tips,key): ltips=len(tips) lkey=len(key) secret=[] num=0 for each in tips: if num>=lkey: num=num%lkey secret.append( chr( ord(each)^ord(key[num]) ) ) num+=1 return b64.b64encode( "&

  • Java生成MD5加密字符串代码实例

    (1)一般使用的数据库中都会保存用户名和密码,其中密码不使用明码保存.     有时候用MD5密码,很多语言都提供了将字符串生成为MD5密码的方法或函数.MD5的加密算法是公开的.     有时候也可以用自己的字符串加密算法,这种加密算法是只有自己知道的. (2)破解MD5的过程就是先算好大量或者所有可能的字符串的MD5数值,之后进行查询就可以破解.虽然有些网站规定了密码的位数在6~20位之间,但是要事先计算这么多是字符串并有效的组织存储.查询还是相当麻烦,相当慢的. 因为MD5的位数是固定的,

随机推荐