在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访问查询mysql数据的三种方法
Oct 09 PHP
同台服务器使用缓存APC效率高于Memcached的演示代码
Feb 16 PHP
深入理解PHP之require/include顺序 推荐
Jan 02 PHP
8个出色的WordPress SEO插件收集
Feb 26 PHP
深入理解:XML与对象的序列化与反序列化
Jun 08 PHP
解析PHP处理换行符的问题 \r\n
Jun 13 PHP
php计算到指定日期还有多少天的方法
Apr 14 PHP
php使用ffmpeg获取视频信息并截图的实现方法
May 03 PHP
WordPress中的shortcode短代码功能使用详解
May 17 PHP
php mysql 封装类实例代码
Sep 18 PHP
php生成0~1随机小数的方法(必看)
Apr 05 PHP
php微信公众号开发之现金红包
Apr 16 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
详解PHP对象的串行化与反串行化
2016/01/24 PHP
PHP中常用的魔术方法
2017/04/28 PHP
PHP中ltrim()函数的用法与实例讲解
2019/03/28 PHP
FireFox JavaScript全局Event对象
2009/06/14 Javascript
你需要知道的10个最佳javascript开发实践小结
2012/04/15 Javascript
jquery让指定的元素闪烁显示的方法
2015/03/17 Javascript
JavaScript里四舍五入函数round用法实例
2015/04/06 Javascript
JavaScript框架是什么?怎样才能叫做框架?
2015/07/01 Javascript
老生常谈JavaScript数组的用法
2016/06/10 Javascript
jQ处理xml文件和xml字符串的方法(详解)
2016/11/22 Javascript
JS实现图片上传多次上传同一张不生效的处理方法
2018/08/06 Javascript
this在vue和小程序中的使用详解
2019/01/28 Javascript
react国际化化插件react-i18n-auto使用详解
2020/03/31 Javascript
js实现简单抽奖功能
2020/11/24 Javascript
OpenLayers3实现地图鹰眼以及地图比例尺的添加
2020/09/25 Javascript
Python学习资料
2007/02/08 Python
Python的time模块中的常用方法整理
2015/06/18 Python
怎样使用Python脚本日志功能
2016/08/14 Python
对python中return和print的一些理解
2017/08/18 Python
Python使用正则表达式获取网页中所需要的信息
2018/01/29 Python
python Flask 装饰器顺序问题解决
2018/08/08 Python
Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围
2019/06/25 Python
Python根据字符串调用函数过程解析
2020/11/05 Python
python 元组和列表的区别
2020/12/30 Python
萌新的HTML5 入门指南
2020/11/06 HTML / CSS
Haglöfs瑞典官方网站:haglofs火柴棍,欧洲顶级户外品牌
2018/10/18 全球购物
Tenstickers法国:墙贴和装饰贴纸
2019/08/26 全球购物
华为慧通面试题
2012/09/11 面试题
高中生国庆节演讲稿范文2014
2014/09/21 职场文书
加强作风建设工作总结
2014/10/23 职场文书
领导个人查摆剖析材料
2014/10/29 职场文书
2014年学生会部门工作总结
2014/11/07 职场文书
2015年市场营销工作总结
2015/07/23 职场文书
房屋买卖定金协议书
2016/03/21 职场文书
Java如何实现树的同构?
2021/06/22 Java/Android
JavaScript展开运算符和剩余运算符的区别详解
2022/02/18 Javascript