在PHP中实现Javascript的escape()函数代码


Posted in PHP onAugust 08, 2010

这里,一般都需要预先将正常的字符串编码成 JavaScript unescape() 函数能够解译的格式,以 PHP 为例,可以使用以下函数实现 Javascript 中 escape() 函数相同的功能:

<?php 
function escapeToHex($string, $encoding = UTF-8) { 
$return = ; 
for ($x = 0; $x < mb_strlen($string, $encoding); $x ++) { 
$str = mb_substr($string, $x, 1, $encoding); 
if (strlen($str) > 1) { // 多字节字符 
$return .= %u . strtoupper(bin2hex(mb_convert_encoding($str, UCS-2, $encoding))); 
} else { 
$return .= % . strtoupper(bin2hex($str)); 
} 
} 
return $return; 
} 
?>

假设我们要隐藏以下地址:http://www.dirk.sh/assets/uploaded/thisistest.pdf
我们可以利用以下脚本实现:
<?php 
// 请自行包含 escapeToHex() 函数定义 
$test = document.write(\<a href="http://www.dirk.sh/assets/uploaded/thisistest.pdf">test</a>\); 
echo <script Language="Javascript">eval_r(unescape(" . escapeToHex($test) . "))</script>; 
?>

如果你查看页面源代码,你会看到(因为太长,所以进行了手动分行,实际运行结果应该是完整的一行):
<script Language="Javascript">eval_r(unescape("%64%6F%63%75%6D%65%6E%74%2E%77 \ 
%72%69%74%65%28%27%3C%61%20%68%72%65%66%3D%22%68%74%74%70%3A%2F%2F%77%77%77 \ 
%2E%64%69%72%6B%79%65%2E%6E%65%74%2F%75%70%6C%6F%61%64%65%64%2F%74%68%69%73 \ 
%69%73%74%65%73%74%2E%70%64%66%22%3E%74%65%73%74%3C%2F%61%3E%27%29"))</script>

而在浏览器中显示的页面,和普通 html 没有分别。
注:
1、escapeToHex() 函数的第二个参数($encoding)表示你传递进来的字符串的编码,默认是 UTF-8,如果你使用了其他编码,应该在调用函数的明确指定;
2、unescape() 在 ECMAScript v3 规范中被反对使用,该规范建议使用新的替代函数 decodeURIComponent(),但我经过测试发现,decodeURIComponent()函数对多字节字符(中文)处理存在问题,所以仍然使用了 unescape() 函数。
3、原则上来说,上述方法只是为了防止搜索爬虫获取你认为需要保密的资源地址,在支持 Javascript 的浏览器下浏览页面,和没有启用这种保护机制情况下看到的呈现是完全相同的。
PHP 相关文章推荐
PHP新手上路(二)
Oct 09 PHP
PHP 面向对象详解
Sep 13 PHP
php实现mysql数据库操作类分享
Feb 14 PHP
php中实现记住密码下次自动登录的例子
Nov 06 PHP
php session 写入数据库
Feb 13 PHP
php_pdo 预处理语句详解
Nov 21 PHP
在PHP 7下安装Swoole与Yar,Yaf的方法教程
Jun 02 PHP
PHP在弹框中获取foreach中遍历的id值并传递给地址栏
Jun 13 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
Aug 28 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
Dec 25 PHP
PHP获取当前系统时间的方法小结
Oct 03 PHP
Laravel配合jwt使用的方法实例
Oct 25 PHP
PHP下escape解码函数的实现方法
Aug 08 #PHP
ubuntu 编译安装php 5.3.3+memcache的方法
Aug 05 #PHP
PHP MemCached高级缓存配置图文教程
Aug 05 #PHP
PHP Array交叉表实现代码
Aug 05 #PHP
php垃圾代码优化操作代码
Aug 05 #PHP
PHP MemCached 高级缓存应用代码
Aug 05 #PHP
phpMyAdmin 链接表的附加功能尚未激活的问题
Aug 01 #PHP
You might like
win2003服务器使用WPS的COM组件的一些问题解决方法
2012/01/11 PHP
完美解决:Apache启动问题―(OS 10022)提供了一个无效的参数
2013/06/08 PHP
Thinkphp 框架扩展之应用模式实现方法分析
2020/04/27 PHP
javascript 面向对象编程  function是方法(函数)
2009/09/17 Javascript
jQuery对象和DOM对象使用说明
2010/06/25 Javascript
ie8本地图片上传预览示例代码
2014/01/12 Javascript
jQuery实现控制文字内容溢出用省略号(…)表示的方法
2016/02/26 Javascript
js修改onclick动作的四种方法(推荐)
2016/08/18 Javascript
Bootstrap的Carousel配合dropload.js实现移动端滑动切换图片
2017/03/10 Javascript
nodejs中使用HTTP分块响应和定时器示例代码
2017/03/19 NodeJs
js精确的加减乘除实例
2017/11/14 Javascript
create-react-app 修改为多入口编译的方法
2018/08/01 Javascript
Angularjs Ng_repeat中实现复选框选中并显示不同的样式方法
2018/09/12 Javascript
详解vue中localStorage的使用方法
2018/11/22 Javascript
vue实现跨域的方法分析
2019/05/21 Javascript
ElementUI Tag组件实现多标签生成的方法示例
2019/07/08 Javascript
layui表格数据重载
2019/07/27 Javascript
小程序自定义弹框效果
2020/11/16 Javascript
使用python删除nginx缓存文件示例(python文件操作)
2014/03/26 Python
apache部署python程序出现503错误的解决方法
2017/07/24 Python
python中文乱码不着急,先看懂字节和字符
2017/12/20 Python
Python爬虫框架Scrapy实例代码
2018/03/04 Python
python的slice notation的特殊用法详解
2019/12/27 Python
python numpy 矩阵堆叠实例
2020/01/17 Python
Python tkinter和exe打包的方法
2020/02/05 Python
Python3 利用face_recognition实现人脸识别的方法
2020/03/13 Python
torchxrayvision包安装过程(附pytorch1.6cpu版安装)
2020/08/26 Python
法国在线药房:Shop Pharmacie
2019/11/26 全球购物
adidas泰国官网:adidas TH
2020/07/11 全球购物
Servlet的生命周期
2013/08/25 面试题
出纳的岗位职责
2013/11/09 职场文书
志愿者爱心公益活动策划方案
2014/09/15 职场文书
2014广电局实施党的群众路线教育实践活动方案思想汇报
2014/09/22 职场文书
门卫管理制度范本
2015/08/05 职场文书
500字作文之难忘的同学
2019/12/20 职场文书
go语言中json数据的读取和写出操作
2021/04/28 Golang