在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 相关文章推荐
js限制checkbox勾选的个数以及php获取多个checkbbox的方法深入解析
Jul 18 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
Apr 29 PHP
使用PHP函数scandir排除特定目录
Jun 12 PHP
php+mysql删除指定编号员工信息的方法
Jan 14 PHP
php实现excel中rank函数功能的方法
Jan 20 PHP
PHP邮箱验证示例教程
Jun 01 PHP
基于PHPexecl类生成复杂的报表表头示例
Oct 14 PHP
完美解决Thinkphp3.2中插入相同数据的问题
Aug 01 PHP
PHP+Redis开发的书签案例实战详解
Jul 09 PHP
对laravel in 查询的使用方法详解
Oct 09 PHP
php使用自带dom扩展进行元素匹配的原理解析
May 29 PHP
PHP的imageTtfText()函数深入详解
Mar 03 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
shopex主机报错误请求解决方案(No such file or directory)
2011/12/27 PHP
PHP依赖倒置(Dependency Injection)代码实例
2014/10/11 PHP
ThinkPHP 3.2 数据分页代码分享
2014/10/14 PHP
Symfony2在Nginx下的配置方法图文教程
2016/02/04 PHP
PHP实现的随机红包算法示例
2017/08/14 PHP
Flash对联广告的关闭按钮讨论
2007/01/30 Javascript
jQuery 使用手册(五)
2009/09/23 Javascript
Firefox/Chrome/Safari的中可直接使用$/$$函数进行调试
2012/02/13 Javascript
js 将json字符串转换为json对象的方法解析
2013/11/13 Javascript
js的回调函数详解
2015/01/05 Javascript
浅谈jQuery中的事件
2015/03/23 Javascript
Bootstrap媒体对象的实现
2016/05/01 Javascript
浅谈javascript的url参数parse和build函数
2017/03/04 Javascript
JS高级技巧(简洁版)
2018/07/29 Javascript
Vue+ElementUI table实现表格分页
2019/12/14 Javascript
JS表单验证插件之数据与逻辑分离操作实例分析【策略模式】
2020/05/01 Javascript
Python中os.path用法分析
2015/01/15 Python
详解Python中的条件判断语句
2015/05/14 Python
python远程调用rpc模块xmlrpclib的方法
2019/01/11 Python
Python第三方库face_recognition在windows上的安装过程
2019/05/03 Python
在python中,使用scatter绘制散点图的实例
2019/07/03 Python
pytorch 共享参数的示例
2019/08/17 Python
如何通过python检查文件是否被占用
2020/12/18 Python
纯CSS3实现鼠标悬停提示气泡效果
2014/02/28 HTML / CSS
一款利用纯css3实现的超炫3D表单的实例教程
2014/12/01 HTML / CSS
HTML5 Canvas标签使用收录
2009/07/07 HTML / CSS
Silk’n激光脱毛器官网:silkn.com
2016/10/06 全球购物
潘多拉意大利官方网上商城:网上选购PANDORA珠宝
2018/10/07 全球购物
Edwaybuy西班牙:小米在线商店
2019/12/04 全球购物
The North Face官方旗舰店:美国著名户外品牌
2020/09/28 全球购物
群胜软件Java笔试题
2012/09/29 面试题
数控技校生自我鉴定
2014/04/19 职场文书
客户答谢会活动方案
2014/08/31 职场文书
离职报告格式
2014/11/04 职场文书
2020年基层司法所建设情况调研报告
2019/11/30 职场文书
深度学习小工程练习之垃圾分类详解
2021/04/14 Python