在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 第二节 数据类型之数值型
Apr 28 PHP
PHP中如何实现常用邮箱的基本判断
Jan 07 PHP
php读取文件内容的三种可行方法示例介绍
Feb 08 PHP
php判断是否为json格式的方法
Mar 04 PHP
php判断电脑访问、手机访问的例子
May 10 PHP
ThinkPHP之import方法实例详解
Jun 20 PHP
Yii框架在页面输出执行sql语句以方便调试的实现方法
Dec 24 PHP
PHP中返回引用类型的方法
Apr 03 PHP
PHP关联数组实现根据元素值删除元素的方法
Jun 26 PHP
Laravel 5.3 学习笔记之 错误&amp;日志
Aug 28 PHP
PHP以json或xml格式返回请求数据的方法
May 31 PHP
Laravel实现搜索的时候分页并携带参数
Oct 15 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
ThinkPHP之import方法实例详解
2014/06/20 PHP
php模仿asp Application对象在线人数统计实现方法
2015/01/04 PHP
Symfony2学习笔记之控制器用法详解
2016/03/17 PHP
js 匿名调用实现代码
2009/06/19 Javascript
js 自动播放的实例代码
2013/11/19 Javascript
javascript回车完美实现tab切换功能
2014/03/13 Javascript
JS、DOM和JQuery之间的关系示例分析
2014/04/09 Javascript
跟我学习javascript解决异步编程异常方案
2015/11/23 Javascript
JavaScript创建对象的方式小结(4种方式)
2015/12/17 Javascript
jQuery Validate插件自定义验证规则的方法
2016/12/27 Javascript
vue组件父与子通信详解(一)
2017/11/07 Javascript
NodeJS安装图文教程
2018/04/19 NodeJs
js继承的这6种方式!(上)
2019/04/23 Javascript
express如何解决ajax跨域访问session失效问题详解
2019/06/20 Javascript
Python读写ini文件的方法
2015/05/28 Python
Python求两个文本文件以行为单位的交集、并集与差集的方法
2015/06/17 Python
Python性能提升之延迟初始化
2016/12/04 Python
pyqt5自定义信号实例解析
2018/01/31 Python
Python中xml和json格式相互转换操作示例
2018/12/05 Python
python读取txt文件并取其某一列数据的示例
2019/02/19 Python
Python实现的合并两个有序数组算法示例
2019/03/04 Python
python 并发编程 阻塞IO模型原理解析
2019/08/20 Python
感知器基础原理及python实现过程详解
2019/09/30 Python
tf.concat中axis的含义与使用详解
2020/02/07 Python
python 实现Harris角点检测算法
2020/12/11 Python
HTML5给汉字加拼音收起展开组件的实现代码
2020/04/08 HTML / CSS
法国家具及室内配件店:home24
2017/01/21 全球购物
电子商务专业学生的学习自我评价
2013/10/27 职场文书
党员公开承诺事项
2014/03/25 职场文书
市场营销毕业生自荐信范文
2014/04/01 职场文书
试用期转正后的自我评价
2014/09/21 职场文书
学生抄作业检讨书(2篇)
2014/10/17 职场文书
公司财务部岗位职责
2015/04/14 职场文书
农村党员干部承诺书
2015/05/04 职场文书
入队仪式主持词
2015/07/04 职场文书
领导新年致辞2016
2015/07/29 职场文书