完善的(escape/unescape/unicode_utf8)PHP互转函数

CTF Web入门:从Base64编码与源码审计看前端安全思维 在Web安全领域,信息收集是渗透测试与漏洞挖掘的基石。其核心原理在于理解客户端与服务器之间的数据交互过程,任何传输至前端的数据,无论以何种形式呈现,本质上都可能暴露敏感信息。Base64编码作为一种常见的数据表示方式,常被用于在文本协议中安全传输二进制数据,但其本质是编码而非加密,这意味着任何人都能轻易将其解码还原。这一特性在工程实践中,常被开发者误用于“隐藏”密码、密钥等敏感数据,从而构成了典型的安全隐患。通过审查网页源码、分析网络请求,安全人员可以定位并解码这些Base64字符串,这正是CTF竞赛中We 阅读详情

参考文章
http://tech.163.com/05/0516/10/1JS9KEGA00091589.html
UTF编码
UTF-8就是以8位为单元对UCS进行编码。从UCS-2到UTF-8的编码方式如下:
UCS-2编码(16进制)
UTF-8 字节流(二进制)
0000 - 007F
0xxxxxxx
0080 - 07FF
110xxxxx 10xxxxxx
0800 - FFFF
1110xxxx 10xxxxxx 10xxxxxx
  例如“汉”字的Unicode编码是6C49。6C49在0800-FFFF之间,所以肯定要用3字节模板了:1110 xxxx 10 xxxxxx 10 xxxxxx。将6C49写成二进制是:0110 110001 001001, 用这个比特流依次代替模板中的x,得到:1110 0110 10 110001 10 001001,即E6 B1 89。
终于将unicode和utf8互转搞定。
如果utf-8编码的字符ch是3个字节。xx yy zz
将xx和1F AND 操作得到 a
将yy和7F AND 操作得到 b
将zz和7F AND 操作得到 c
(64a+b)*64+c = ch(unicode编码)
echo.php没什么。就是几个函数。
");
//写入unicode文件
$ucs2data = utf8ToUnicode($data,"little");
$endian = chr(0xFE).chr(0xFF);
$endian =  chr(0xFF).chr(0xFE);
$rt = file_put_contents ( "ucs2.txt", $endian.$ucs2data);
                //19:32,utf8toUnicode函数ok.
                //20:09。发现little endian 和big endian问题。并解决。
                //big endian 方式存入的unicode字符串,ue和editplus均不能
                //识别。只有notepad正常识别。
$rt = file_put_contents ( "usc2ys_data.txt", $ucs2_ysdata);
//写入utf8文件
$utf8data = unicodeToUtf8($ucs2data);   // 20:52. 将字串转回utf8码ok.
$rt = file_put_contents ( "utf8.txt", $utf8data);
echo(urlencode($utf8data));echo("");
$esc = utf8Escape($data);
echot($esc);
$esc = phpEscape($data);
echot($esc);
$unesc = phpUnescape($esc);
echot($unesc);
/**
* 此函数将utf8编码字串转为unicode编码字符串
* 参数 str ,utf8编码的字符串。
* 参数 order,存放数据格式,是big endian还是little endian,默认的unicode存放次序是little.
* 如:"大"的unicode码是 5927。little方式存放即为:27 59 。big方式则顺序不变:59 27.
* little 存放格式文件的开头均需有FF FE。big 存放方式的文件开头为 FE FF。否则。将会产生严重混乱。
* 本函数只转换字符,不负责增加头部。
* iconv转换过来的字符串是 big endian存放的。
* 返回 ucs2string , 转换过的字符串。
* 感谢唠叨(xuzuning)
*/
function utf8ToUnicode($str,$order="little")
{
  $ucs2string ="";
    $n=strlen($str);
    for ($i=0;$i0x80) {  //110xxxxx 10xxxxxx
   $a = (ord($str[$i]) & 0x3F )0x80  && ord($str[$i+2])>0x80) { //1110xxxx 10xxxxxx 10xxxxxx
      $a = (ord($str[$i]) & 0x1F)转为utf8编码字符串
* 参数 str ,unicode编码的字符串。
* 参数 order ,unicode字串的存放次序,为big endian还是little endian.
* 返回 utf8string , 转换过的字符串。
*
*/
function unicodeToUtf8($str,$order="little")
{
$utf8string ="";
    $n=strlen($str);
    for ($i=0;$i转回来。
  $i++; //两个字节表示一个unicode字符。
  $c = "";
  if($val utf8string .= $c;
    }
return $utf8string;
} // end func

/*
* 将utf8编码的字符串编码为unicode 码型,等同escape
* 之所以只接受utf8码,因为只有utf8码和unicode之间有公式转换,其他的编码都得查码表来转换。
* 不知道查找utf8码的正则是否完全正确。迷茫ing
* 虽然调用utf2ucs对每个字符进行码值计算。效率过低。然而,代码清晰,要是把那个计算过程嵌入。
* 代码就不太容易阅读了。
*/
function utf8Escape($str) {
  preg_match_all("/[\xC0-\xE0].|[\xE0-\xF0]..|[\x01-\x7f]+/",$str,$r);
  //prt($r);
  $ar = $r[0];
  foreach($ar as $k=>$v) {
$ord = ord($v[0]);
    if( $ordutf8码
      $ar[$k] = "%u".utf2ucs($v);
    }
  elseif ($ordutf8码
      $ar[$k] = "%u".utf2ucs($v);
}
  }//foreach
  return join("",$ar);
}
/**
*
* 把utf8编码字符转为ucs-2编码
* 参数 utf8编码的字符。
* 返回 该字符的unicode码值。知道了码值,你就能使用chr将字符弄出来了。
*
*  原理:unicode转为utf-8码的算法是。头部固定位或。
该过程的逆向算法就是这个函数了,头部固定位反位和。
*/
function utf2ucs($str){
$n=strlen($str);
if ($n=3) {
     $highCode = ord($str[0]);     
  $midCode = ord($str[1]);
     $lowCode = ord($str[2]);
  $a   = 0x1F & $highCode;
  $b   = 0x7F & $midCode;
  $c   = 0x7F & $lowCode;
  $ucsCode = (64*$a + $b)*64 + $c;  
}
elseif ($n==2) {
    $highCode = ord($str[0]);     
     $lowCode = ord($str[1]);
  $a   = 0x3F & $highCode;  //0x3F是0xC0的补数
  $b   = 0x7F & $lowCode;  //0x7F是0x80的补数
  $ucsCode = 64*$a + $b;  
}
elseif($n==1) {
     $ucscode = ord($str);
}
return dechex($ucsCode);
}

/*
* 用处 :此函数用来逆转javascript的escape函数编码后的字符。
* 关键的正则查找我不知道有没有问题.
* 参数:javascript编码过的字符串。
* 如:unicodeToUtf8("%u5927")= 大
* 2005-12-10
*
*/
function phpUnescape($escstr){
  preg_match_all("/%u[0-9A-Za-z]{4}|%.{2}|[0-9a-zA-Z.+-_]+/",$escstr,$matches); //prt($matches);
  $ar = &$matches[0];
  $c = "";
  foreach($ar as $val){
if (substr($val,0,1)!="%") { //如果是字母数字+-_.的ascii码
     $c .=$val;
}
elseif (substr($val,1,1)!="u") { //如果是非字母数字+-_.的ascii码
  $x = hexdec(substr($val,1,2));
     $c .=chr($x);
}
else { //如果是大于0xFF的码
  $val = intval(substr($val,2),16);
  if($val %u".bin2hex( iconv( ’gbk’ ,"UCS-2",$chars[$i].$chars[$i+1] ) );
$i++;
}
}//foreach
return $ar;
}
?>

从稳压管到LDO芯片:一张图看懂线性电源的‘内卷’进化史 本文追溯了从稳压管到LDO芯片的线性电源技术进化历程,详细解析了各阶段的技术突破与局限。重点探讨了现代LDO在超低功耗、高精度控制等方面的创新,并提供了实战选型的黄金法则,帮助工程师在电子设备小型化与低功耗化趋势中做出最优选择。 阅读详情

相关推荐

当我们谈论Unidbg时我们在谈什么

文章目录一、前言二、使用Unidbg的工作量是什么三、补环境补的是什么3.1 运行环境缺失3.2 上下文缺失四、Unidbg 不是所有情况下最优的解决方案五、Unidbg在大多数情况下是好的方案六、Unidbg和风控无关七、尾声 一、前言 这是一篇漫谈Unidbg的文章,我对Unidbg的使用和理解都还很浅,日后会更新或修改看法,欢迎大佬指点,也期待同侪讨论。 二、使用Unidbg的工作量是什么 我们常规使用Frida + IDA的动静态分析中,工作可能是这样的 找线索→Frida Hook验证→验证成功继

lilac的博客 5788

同时存在unicode-escape和utf-8的解码方法

在爬取lc提交代码的时候遇到的一个问题,在爬取到的源码中,符号是采用unicode-escape编码的,而其中的中文是采用utf-8编码的,正常解码无论怎样都会出现乱码,本文记录下解决办法。 文章目录示例解决办法 示例 下面是lc第一题爬取的源码,编码为"utf-8",中文可以正确显示,但是换行符等符号并不能正确显示,因此需要转换。 code = "class Solution:\u000A def twoSum(self, nums: List[int], target: int) \u002D

文艺圈不知名刘先生 3783

PYNQ开发板使用-使用DMA进行数据搬移(Simple DMA transfer 模式)

该篇是学习使用PYNQ开发板,实际上是对ZYNQ PL端AXI_CDMA 核的应用。实验步骤参照官网的教程,一步一步地做,但是由于在硬件资源布置方面与官方教程稍有出入,所以在SDK的源码里也进行了修改。 AXI_CDMA特性: 如果是使用ZYNQ 7系列芯片(可能其他Xilinx也是通用的),xilinx的AXI_CDMA 核有两种传输模式:轮询(poll)和中断(...

YGLeeeon的博客 3521

JS计算UTF8字符串占用字节数(escape版与UTF8专用版)

使用escape是为了使所有编码都转换成统一的编码格式(Unicode), 如GBK编码的"中国", 与UTF8编码的"中国",它们的escape返回值都是一样的,所以代码具有通用性,且escape在JS1.0已经有了,各浏览器都通用如果不考虑通用性,且html为UTF8编码的,可以用UTF8版本escape版:function utf8_strlen(str){    v

SpriteLW的专栏 2852

【渗透工具】内网多级代理工具Venom详细使用教程

Venom是一款为渗透测试人员设计的使用Go开发的多级代理工具。Venom可将多个节点进行连接,然后以节点为跳板,构建多级代理。渗透测试人员可以使用Venom轻松地将网络流量代理到多层内网,并轻松地管理代理节点。

TT小子的博客 3757

RTOS任务调度原理:高优先级任务为何在低优先级任务执行时无法响应

实时操作系统(RTOS)的核心在于其确定性的任务调度机制,它通过优先级抢占确保关键任务及时执行。其基本原理是调度器仅在特定调度点(如任务主动阻塞、中断退出时)运行,比较就绪态任务的优先级并切换上下文。这一机制的技术价值在于为嵌入式系统提供可预测的响应时间,广泛应用于工业控制、汽车电子和物联网设备等对实时性要求高的场景。当低优先级任务执行**长时间非阻塞运算**且无中断发生时,调度器无法被触发,导致高优先级任务虽处于就绪态却无法获得CPU,造成系统响应延迟。理解**任务状态机**与调度点,是优化实时性、避免此

weixin_33508411的博客 287

python爬虫中unescape 将JS中escape后的字符串解码

#编码 escape_str = ‘北京’ str = escape_str.encode(‘unicode_escape’).decode(‘utf-8’) str1 = str.replace(’\u’,’%u’)# 得到结果 str1 = ‘%u5317%u4eac’ print(str1) #同理解码 import urllib.parse escape_str = ‘%u4eba%u75...

极简之美,独具匠心。 675

E2000 RGMII0通讯异常问题总结

飞腾E2000 RGMII接YT8521,RGMII0路不通问题。

乌拉大喵喵 1630

记一次 unicode-escape 和 utf-8 编码的互解

记一次 unicode-escape 和 utf-8 编码的转换 是这样的,我在做 CTF 题的 RC4 编码时遇到一个 base64 加密后输出的密文: mg6CITV6GEaFDTYnObFmENOAVjKcQmGncF90WhqvCFyhhsyqq1s= . . 直接 base64 解密后发现输出的是: b"\x9a\x0e\x82!5z\x18F\x85\r6’9\xb1f\x10\xd3\x80V2\x9cBa\xa7p_tZ\x1a\xaf\x08\\xa1\x86\xcc\xaa\xab

沐一 · 林 的博客 3382

差分音频转单端音频单电源方案

其中,芯片设计中的轨到轨输出(Rail-to-Rail Output) 是指通过特定的电路设计,使芯片(如运算放大器、驱动电路等)的输出电压能够达到或接近电源电压的上下极限(即“电源轨”),从而最大化信号的动态范围。最终,Vout=R2/R1*(Vin2−Vin1),即输出电压为输入电压差(Vin2−Vin1)乘以电阻比R2/R1。2、电阻:R1、R2、R3、R4是电路中的电阻,其中R1 = R3,R2 = R4。因R1=R3,R2=R4,且Vn=Vp,设R1=R3=R,R2=R4=kR。

电子绿洲的博客 4959

【Qwen2微调实战】LLaMA-Factory框架对Qwen2-7B模型的微调实践

在人工智能的浪潮中,大型语言模型(LLMs)正逐渐成为研究和应用的热点。它们在自然语言处理(NLP)的各个领域,如文本生成、翻译、问答等任务中展现出了卓越的能力。Qwen2-7B模型,作为该领域的佼佼者,不仅因其庞大的参数量和强大的表示能力受到关注,更因其在微调后能够更好地适应特定任务而备受关注。本文将详细介绍如何利用LLaMA-Factory这一高效的微调框架对Qwen2-7B进行微调,以期达到提升模型在特定任务上的表现。

寻道AI,探索AI无限可能! 2万+

深入解析JavaScript中的unescape函数

unescape函数是JavaScript中的一个全局函数,用于将被转义的字符串还原成原始字符串。它是escape函数的逆操作。在JavaScript中,为了方便在HTTP请求中传递参数,有时需要将特殊字符进行转义,比如用%20表示空格,用%26表示&号。此时,可以使用escape函数将字符串进行转义。而unescape函数则是将被转义后的字符串还原成原始字符串。

Gorden的博客 4074

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

php+x+转中文+代码,php的汉字转换: Unicode(UTF8)->GB_php

秋水无恨 GBK Unicode UTF8 汉字 转换php的汉字转换一直是比较麻烦的事该类内置了四个过滤"[dec];","[hex];","%u[hex]","utf8转换"方便用户的使用,同时也可自定义过滤进行自己喜欢的操作qswhU.php 从这里下载http://www.blueidea.com/user/qswh/qswhU.zipclass qswhU{var $qswhData;f...

weixin_36060465的博客 3022

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

php 汉字转换utf8,php的汉字转换:Unicode(UTF8)至GBK

php的汉字转换一直是比较麻烦的事该类内置了四个过滤"[dec];","[hex];","%u[hex]","utf8转换"方便用户的使用,同时也可自定义过滤进行自己喜欢的操作qswhU.php 从这里下载http://www.blueidea.com/user/qswh/qswhU.zipclass qswhU{var $qswhData;function qswhU($filename="qs...

weixin_31847389的博客 292

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

PHP UNICODE 编码转换(JS的encodeURIComponent函数 和 PHP的自定义unescape函数)

1 002 /** 003  * 将字符串转换成unicode编码 004  * 005  * @param string $input 006

u013707844的专栏 1271

php解escape,PHP下escape解码函数的实现方法

GB2312编码: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","G...

weixin_39765588的博客 113

PHP实现gb2312、UTF-8等字符和unicode间的编码转换及PHP版unescape

编写 PHP 代码的过程中,经常会遇到需要对中文转码的问题,如 GB2312 Unicode、GB2312 Big5 等等。如果 PHP 编译时带有 mbstring 的话,可以使用 Multi-Byte String Function 实现部分转码工作。然而由于很多虚拟主机不支持 mbstring,或者 mbstring 的编译、配置过于麻烦,很多 PHP 代码无法使用这一序列的函数。 最近为了解决这个问题,让我心烦不已,通过搜集资料和整理,终于实现了GB2312 Big5 Unicode(UT

churujianghu的专栏 2444

%e5 转换汉字 php,php的汉字转换:Unicode(UTF8)至GBK

php的汉字转换一直是比较麻烦的事该类内置了四个过滤”[dec];”,”[hex];”,”%u[hex]”,”utf8转换”方便用户的使用,同时也可自定义过滤进行自己喜欢的操作class qswhU{var $qswhData;function qswhU($filename=”qswhU.php”){$this->qswhData=file($filename);}function dec...

weixin_33930436的博客 1042

php汉字转utf,php的汉字转换: Unicode(UTF8)->GBK

qswhU.php 从这里下载http://www.blueidea.com/user/qswh/qswhU.zipclass qswhU{var $qswhData;function qswhU($filename="qswhU.php"){$this->qswhData=file($filename);}function decode($str,$pattern=0){$arr=arra...

weixin_30691643的博客 159

php常用方法是什么意思,php一些常用方法

php一些常用方法//将网址的参数转为变量,如:xxx.php?a=1&b=2,//运行方法后,echo $a."|".$b, 结果:1|2extract($_GET);//unicode转utf8,如:中或 \u9865 转 成 中文function unescape($str) {$str = rawurldecode($str);preg_match_all("/(?:%u.{4}...

weixin_42437126的博客 84

用PHP将Unicode 转化为UTF-8

function unescape($str) { $str = rawurldecode($str); preg_match_all("/(?:%u.{4})|&#x.{4};|&#\d+;|.+/U",$str,$r); $ar = $r[0]; //print_r($ar); foreach($ar as $k=&gt...

weixin_30709929的博客 156

php开发团队如何分工,给php开发团队的建议

同一个项目的所有文件是否可以统一使用的文本编码? 建议使用utf8。 我在不同部门看到过不少项目的文件编码不统一,有的文件编码格式是utf8的,有的是gbk的,甚至同一个php文件不同段落的编码也是不统一的。这造成我用编辑器打开不同文件,很多都要重新设定加载编码,否则看到的注释都是乱码,甚至在看同一文件的不同部分,也得切换编码。是否可以统一文件格式?建议使用linux文件。至少现在从icode里看...

weixin_31485835的博客 424

做php适配信创的过程中会遇到的所有问题。很细很细

qq_37805832的博客 609

unescape解密 php,[PHP]php中escape函数加密与JS中unescape解密

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

weixin_42237925的博客 616

js unescape 对应php的函数,php实现Javascript的escape和unescape函数

由于需要用到php调用js文件,在网上找了相关的资料,并改写了相关的方法。php实现Javascript的escape函数方法:function escape($str) {preg_match_all("/[/xc2-/xdf][/x80-/xbf]+|[/xe0-/xef][/x80-/xbf]{2}|[/xf0-/xff][/x80-/xbf]{3}|[/x01-/x7f]+/e",$st...

weixin_33651906的博客 230

php中跟unescape相同功能d,PHP实现Javascript中的escape及unescape函数代码分享_php实例...

这个类相当好用.作用么,PHP做JSON传递GBK字符,比如中文,日文,韩文神马的Unicode最合适不过了..1){// 多字节字符$return.='%u'.strtoupper(bin2hex(mb_convert_encoding($str,'UCS-2',$encoding)));}else{$return.='%'.strtoupper(bin2hex($str));}}return$...

weixin_35779845的博客 169
上一篇: Apache Url Rewrite(mod_rewrite)
下一篇: 一个简单方法完成C#时间间隔的计算
goingdownba
博客等级 码龄23年 28粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值