在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 相关文章推荐
改进的IP计数器
Oct 09 PHP
IIS6的PHP最佳配置方法
Mar 19 PHP
php-accelerator网站加速PHP缓冲的方法
Jul 30 PHP
PHP 时间转换Unix时间戳代码
Jan 22 PHP
php写的AES加密解密类分享
Jun 20 PHP
php实现的RSS生成类实例
Apr 23 PHP
php实现的错误处理封装类实例
Jun 20 PHP
php 后端实现JWT认证方法示例
Sep 04 PHP
PHP添加文字水印或图片水印的水印类完整源代码与使用示例
Mar 18 PHP
php+ajax 文件上传代码实例
Mar 18 PHP
PHP7 mongoDB扩展使用的方法分享
May 02 PHP
laravel 解决Eloquent ORM的save方法无法插入数据的问题
Oct 21 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
第七节 类的静态成员 [7]
2006/10/09 PHP
PHP中的类型提示(type hinting)功能介绍
2015/07/01 PHP
WordPress中访客登陆实现邮件提醒的PHP脚本实例分享
2015/12/14 PHP
PHP程序中的文件锁、互斥锁、读写锁使用技巧解析
2016/03/21 PHP
Yii框架表单提交验证功能分析
2017/01/07 PHP
phpinfo()中Loaded Configuration File(none)的解决方法
2017/01/16 PHP
phpStorm+XDebug+chrome 配置详解
2019/04/01 PHP
JS判断对象是否存在的10种方法总结
2013/12/23 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
2014/04/02 Javascript
浅谈 javascript 事件处理
2015/01/04 Javascript
jquery实现定时自动轮播特效
2015/12/10 Javascript
浏览器环境下JavaScript脚本加载与执行探析之defer与async特性
2016/01/14 Javascript
jQuery Masonry瀑布流布局神器使用详解
2017/05/25 jQuery
webpack 模块热替换原理
2018/04/09 Javascript
使用Vue.observable()进行状态管理的实例代码详解
2019/05/26 Javascript
微信小程序 select 下拉框组件功能
2019/09/09 Javascript
koa2 数据api中间件设计模型的实现方法
2020/07/13 Javascript
代码块高亮可复制显示js插件highlight.js+clipboard.js整合
2021/02/15 Javascript
[57:36]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第三场 2月1日
2021/03/11 DOTA
Python实现简单的可逆加密程序实例
2015/03/05 Python
浅析Python的web.py框架中url的设定方法
2016/07/11 Python
python树的同构学习笔记
2019/09/14 Python
结合OpenCV与TensorFlow进行人脸识别的实现
2019/10/10 Python
python Django框架实现web端分页呈现数据
2019/10/31 Python
python的sys.path模块路径添加方式
2020/03/09 Python
HTML5中外部浏览器唤起微信分享
2020/01/02 HTML / CSS
新西兰最大的天然保健及护肤品网站:HealthPost(直邮中国)
2021/02/13 全球购物
报社实习生自荐信
2014/01/24 职场文书
高中课程设置方案
2014/05/28 职场文书
人代会标语
2014/06/30 职场文书
企业趣味活动方案
2014/08/21 职场文书
律师函格式范本
2015/05/27 职场文书
2016年小学生清明节广播稿
2015/12/17 职场文书
导游词创作书写原则以及开场白技巧怎么学?
2019/09/25 职场文书
nginx网站服务如何配置防盗链(推荐)
2021/03/31 Servers
微信小程序用户授权最佳实践指南
2021/05/08 Javascript