在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 相关文章推荐
第四节 构造函数和析构函数 [4]
Oct 09 PHP
php 安全过滤函数代码
May 07 PHP
php数组删除元素示例
Mar 21 PHP
PHP判断远程图片是否存在的几种方法
May 04 PHP
destoon设置自定义搜索的方法
Jun 21 PHP
PHP结合JQueryJcrop实现图片裁切实例详解
Jul 24 PHP
php数组生成html下拉列表的方法
Jul 20 PHP
thinkphp3.x中display方法及show方法的用法实例
May 19 PHP
PHP制作登录异常ip检测功能的实例代码
Nov 16 PHP
PHP版单点登陆实现方案的实例
Nov 17 PHP
Laravel 修改验证异常的响应格式实例代码详解
May 25 PHP
PHP7 字符串处理机制修改
Mar 09 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
espresso double下 咖啡粉超细时 饼压力对咖啡的影响
2021/03/03 冲泡冲煮
深入PHP操作MongoDB的技术总结
2013/06/02 PHP
深入php处理整数函数的详解
2013/06/09 PHP
浅析php fwrite写入txt文件的时候用 \r\n不能换行的问题
2013/08/06 PHP
使用php语句将数据库*.sql文件导入数据库
2014/05/05 PHP
linux使用crontab实现PHP执行计划定时任务
2014/05/10 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
实现只能输入数字的input不用replace方法
2013/09/12 Javascript
ExtJS4 表格的嵌套 rowExpander应用
2014/05/02 Javascript
Javascript基于对象三大特性(封装性、继承性、多态性)
2016/01/04 Javascript
jQuery中的each()详细介绍(推荐)
2016/05/25 Javascript
jquery中each循环的简单回滚操作
2017/05/05 jQuery
最常用的jQuery表单验证(简单)
2017/05/23 jQuery
3种vue路由传参的基本模式
2018/02/22 Javascript
详解离线安装npm包的几种方法
2018/11/25 Javascript
微信小程序实现文字无限轮播效果
2018/12/28 Javascript
Vue render函数实战之实现tabs选项卡组件
2019/04/22 Javascript
JS实现可视化音频效果的实例代码
2020/01/16 Javascript
React实现轮播效果
2020/08/25 Javascript
js屏蔽F12审查元素,禁止修改页面代码等实现代码
2020/10/02 Javascript
使用jQuery实现购物车
2020/10/29 jQuery
python利用微信公众号实现报警功能
2018/06/10 Python
Python爬虫爬取Bilibili弹幕过程解析
2019/10/10 Python
Windows下Sqlmap环境安装教程详解
2020/08/04 Python
html5 分层屏幕适配的方法
2018/03/16 HTML / CSS
HTML5 SEO优化的一些建议
2020/08/27 HTML / CSS
毕业生造价工程师求职信
2013/10/17 职场文书
C++程序员求职信范文
2014/04/14 职场文书
股东出资证明书范例
2014/10/04 职场文书
街道务虚会发言材料
2014/10/20 职场文书
管理人员岗位职责
2015/02/14 职场文书
小学课改工作总结
2015/08/13 职场文书
Django实现聊天机器人
2021/05/31 Python
python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法
2021/06/05 Python
Python中如何处理常见报错
2022/01/18 Python
python标准库ElementTree处理xml
2022/05/20 Python