在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 相关文章推荐
在Zeus Web Server中安装PHP语言支持
Oct 09 PHP
PHP安装攻略:常见问题解答(二)
Oct 09 PHP
缓存技术详谈―php
Dec 14 PHP
用php或asp创建网页桌面快捷方式的代码
Mar 23 PHP
PHP 日,周,月点击排行统计
Jan 11 PHP
基于ubuntu下nginx+php+mysql安装配置的具体操作步骤
Apr 28 PHP
深入理解php的MySQL连接类
Jun 07 PHP
PHP大批量插入数据库的3种方法和速度对比
Jul 08 PHP
PHP 读取大文件并显示的简单实例(推荐)
Aug 12 PHP
php redis实现对200w用户的即时推送
Mar 04 PHP
php ajax confirm 删除实例详解
Mar 06 PHP
laravel中Redis队列监听中断的分析
Sep 14 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
咖啡的传说和历史
2021/03/03 新手入门
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
2013/06/25 PHP
php实现获取农历(阴历)、节日、节气的类与用法示例
2017/11/20 PHP
PHP设计模式之单例模式原理与实现方法分析
2018/04/25 PHP
JS 实现双色表格实现代码
2009/11/24 Javascript
利用jQuery的$.event.fix函数统一浏览器event事件处理
2009/12/21 Javascript
JS过滤url参数特殊字符的实现方法
2013/12/24 Javascript
AngularJS中的模块详解
2015/01/29 Javascript
js实现的tab标签切换效果代码分享
2015/08/25 Javascript
Javascript实现苹果悬浮虚拟按钮
2016/04/10 Javascript
js添加千分位的实现代码(超简单)
2016/08/01 Javascript
javascript 中设置window.location.href跳转无效问题解决办法
2017/02/09 Javascript
JS简单实现数组去重的方法示例
2017/03/27 Javascript
prototype.js简单实现ajax功能示例
2017/10/18 Javascript
Vue 2.5 Level E 发布了: 新功能特性一览
2017/10/24 Javascript
解决Jstree 选中父节点时被禁用的子节点也会选中的问题
2017/12/27 Javascript
vue setInterval 定时器失效的解决方式
2020/07/30 Javascript
OpenLayers3实现图层控件功能
2020/09/25 Javascript
[58:18]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Mineski
2018/03/30 DOTA
python发送邮件的实例代码(支持html、图片、附件)
2013/03/04 Python
Python利用QQ邮箱发送邮件的实现方法(分享)
2017/06/09 Python
numpy中实现ndarray数组返回符合特定条件的索引方法
2018/04/17 Python
使用Python通过win32 COM打开Excel并添加Sheet的方法
2018/05/02 Python
关于Python3 类方法、静态方法新解
2019/08/30 Python
python框架flask表单实现详解
2019/11/04 Python
python导入不同目录下的自定义模块过程解析
2019/11/18 Python
一篇文章带你学习CSS3图片边框
2020/11/04 HTML / CSS
Under Armour美国官网:美国知名高端功能性运动品牌
2016/09/05 全球购物
Joules美国官网:出色的英国风格
2017/10/30 全球购物
班组长岗位职责范本
2014/01/05 职场文书
餐厅考勤管理制度
2014/01/28 职场文书
老同学聚会感言
2014/02/23 职场文书
公司优秀员工获奖感言
2014/08/14 职场文书
房产销售独家委托书范本
2014/10/01 职场文书
初三学生语文考试作弊检讨书
2014/12/14 职场文书
喜迎建国70周年:有关爱国的名言名句
2019/09/24 职场文书