在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数据库开发知多少
Oct 09 PHP
用户的详细注册和判断
Oct 09 PHP
PHP 字符串操作入门教程
Dec 06 PHP
简单实用的PHP防注入类实例
Dec 05 PHP
php使用explode()函数将字符串拆分成数组的方法
Feb 17 PHP
php将12小时制转换成24小时制的方法
Mar 31 PHP
如何解决phpmyadmin导入数据库文件最大限制2048KB
Oct 09 PHP
前端必学之PHP语法基础
Jan 01 PHP
PHP给文字内容中的关键字进行套红处理
Apr 12 PHP
PHP7+Nginx的配置与安装教程详解
May 10 PHP
利用switch语句进行多选一判断的实例代码
Nov 14 PHP
php的RSA加密解密算法原理与用法分析
Jan 23 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
星际争霸 Starcraft 编年史
2020/03/14 星际争霸
PHPEXCEL 使用小记
2013/01/06 PHP
php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法
2015/05/25 PHP
PHP数组与字符串互相转换实例
2020/05/05 PHP
Jquery 分页插件之Jquery Pagination
2015/08/25 Javascript
jQuery实现form表单基于ajax无刷新提交方法详解
2015/12/08 Javascript
js判断文本框输入的内容是否为数字
2015/12/23 Javascript
jquery取消事件冒泡的三种方法(推荐)
2016/05/28 Javascript
全面解析jQuery $(document).ready()和JavaScript onload事件
2016/06/08 Javascript
深入浅析JavaScript函数前面的加号和叹号
2016/07/09 Javascript
jQuery的ajax下载blob文件
2016/07/21 Javascript
Jquery针对tr td的一些实用操作方法(必看篇)
2016/10/05 Javascript
Vue父子组件双向绑定传值的实现方法
2018/07/31 Javascript
JS canvas绘制五子棋的棋盘
2020/05/28 Javascript
Python线性方程组求解运算示例
2018/01/17 Python
8种用Python实现线性回归的方法对比详解
2019/07/10 Python
Django中Middleware中的函数详解
2019/07/18 Python
Python数据分析模块pandas用法详解
2019/09/04 Python
Python实现实时数据采集新型冠状病毒数据实例
2020/02/04 Python
解决pyqt5异常退出无提示信息的问题
2020/04/08 Python
jupyter notebook 调用环境中的Keras或者pytorch教程
2020/04/14 Python
Python中实现输入一个整数的案例
2020/05/03 Python
Python 如何查找特定类型文件
2020/08/17 Python
Python之字典对象的几种创建方法
2020/09/30 Python
中国网上药店领导者:1药网
2017/02/16 全球购物
关于运动会的稿件
2014/02/02 职场文书
2014年党总支工作总结
2014/12/18 职场文书
生死牛玉儒观后感
2015/06/11 职场文书
团支部书记竞选稿
2015/11/21 职场文书
2017年寒假社区服务活动总结
2016/04/06 职场文书
导游词之鲁迅祖居
2019/10/17 职场文书
血轮眼轮回眼特效 html+css
2021/03/31 HTML / CSS
如何用Navicat操作MySQL
2021/05/12 MySQL
python中sqllite插入numpy数组到数据库的实现方法
2021/06/21 Python
vue的项目如何打包上线
2022/04/13 Vue.js
Python如何让字典保持有序排列
2022/04/29 Python