在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 相关文章推荐
QueryPath PHP 中的jQuery
Apr 11 PHP
php 定界符格式引起的错误
May 24 PHP
PHP中strtotime函数使用方法详解
Nov 27 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
Apr 15 PHP
基于session_unset与session_destroy的区别详解
Jun 03 PHP
如何用PHP来实现一个动态Web服务器
Jul 29 PHP
PHP新建类问题分析及解决思路
Nov 19 PHP
PHP树-不需要递归的实现方法
Jun 21 PHP
PHP简单读取PDF页数的实现方法
Jul 21 PHP
php无限级分类实现方法分析
Oct 19 PHP
CI框架附属类用法分析
Dec 26 PHP
goto语法在PHP中的使用教程
Sep 17 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 empty,isset,is_null判断比较(差异与异同)
2010/10/19 PHP
PHP单例模式详细介绍
2015/07/01 PHP
详细解读PHP的Yii框架中登陆功能的实现
2015/08/21 PHP
Yii视图CGridView列表用法实例分析
2016/07/12 PHP
PHP实现新型冠状病毒疫情实时图的实例
2020/02/04 PHP
JS操作Cookies包括(读取添加与删除)
2012/12/26 Javascript
js实现幻灯片播放图片示例代码
2013/11/07 Javascript
Mac地址验证的javascript代码
2013/11/09 Javascript
jquery实现非叠加式的搜索框提示效果
2014/01/07 Javascript
Javascript毫秒数用法实例
2015/02/05 Javascript
Javascript 计算字符串在localStorage中所占字节数
2015/10/21 Javascript
jQuery遍历DOM元素与节点方法详解
2016/04/14 Javascript
用瀑布流的方式在网页上插入图片的简单实现方法
2016/09/23 Javascript
js实现各种复制到剪贴板的方法(分享)
2016/10/27 Javascript
jQuery中ztree 点击文本框弹出下拉框的实例代码
2017/02/05 Javascript
详解Angular 4.x Injector
2017/05/04 Javascript
Element输入框带历史查询记录的实现示例
2019/01/15 Javascript
layui 地区三级联动 form select 渲染的实例
2019/09/27 Javascript
js实现无刷新监听URL的变化示例代码详解
2020/06/03 Javascript
[03:12]完美世界DOTA2联赛PWL DAY7集锦
2020/11/06 DOTA
深入讨论Python函数的参数的默认值所引发的问题的原因
2015/03/30 Python
利用Python绘制MySQL数据图实现数据可视化
2015/03/30 Python
详解Python中的序列化与反序列化的使用
2015/06/30 Python
python的else子句使用指南
2016/02/27 Python
Python3实现发送QQ邮件功能(附件)
2020/12/23 Python
python自动发邮件总结及实例说明【推荐】
2019/05/31 Python
python读取与处理netcdf数据方式
2020/02/14 Python
Scotch Porter官方网站:男士美容产品
2020/08/31 全球购物
优秀教师先进事迹
2014/01/22 职场文书
无私奉献演讲稿
2014/09/04 职场文书
英文辞职信范文
2015/05/13 职场文书
2015银行年终工作总结范文
2015/05/26 职场文书
mysql5.6主从搭建以及不同步问题详解
2021/12/04 MySQL
Java如何实现通过键盘输入一个数组
2022/02/15 Java/Android
详解python的异常捕获
2022/03/03 Python
CSS list-style-type属性使用方法
2023/05/21 HTML / CSS