在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程序员面试 切忌急功近利(更需要注重以后的发展)
Sep 01 PHP
PHP开发者常犯的10个MySQL错误更正剖析
Jan 30 PHP
php递归使用示例(php递归函数)
Feb 14 PHP
php中使用array_filter()函数过滤空数组的实现代码
Aug 19 PHP
php解析xml方法实例详解
May 12 PHP
thinkPHP导出csv文件及用表格输出excel的方法
Dec 30 PHP
PHP二维数组排序简单实现方法
Feb 14 PHP
Joomla调用系统自带编辑器的实现方法
May 05 PHP
万能的php分页类
Jul 06 PHP
PHP长网址与短网址的实现方法
Oct 13 PHP
PHP类与对象后期静态绑定操作实例详解
Dec 20 PHP
PHP PDOStatement::setAttribute讲解
Feb 01 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实现的MySQL数据浏览器
2007/03/11 PHP
nginx+php-fpm配置文件的组织结构介绍
2012/11/07 PHP
php实现的一个简单json rpc框架实例
2015/03/30 PHP
JavaScript入门教程(3) js面向对象
2009/01/31 Javascript
Javascript中实现String.startsWith和endsWith方法
2015/06/10 Javascript
JavaScript隐式类型转换
2016/03/15 Javascript
快速掌握jQuery插件WebUploader文件上传
2016/11/07 Javascript
a标签置灰不可点击的实现方法
2017/02/06 Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
2017/03/21 Javascript
BootStrap 表单控件之单选按钮水平排列
2017/05/23 Javascript
详解Vue中localstorage和sessionstorage的使用
2017/12/22 Javascript
swiper 解决动态加载数据滑动失效的问题
2018/02/26 Javascript
jQuery实现ajax回调函数带入参数的方法示例
2018/06/26 jQuery
jQuery中each遍历的三种方法实例分析
2018/09/07 jQuery
浅谈webpack 四个核心概念之Entry
2019/06/12 Javascript
electron+vue实现div contenteditable截图功能
2020/01/07 Javascript
在Vue中获取自定义属性方法:data-id的实例
2020/09/09 Javascript
详解VUE中的插值( Interpolation)语法
2020/10/18 Javascript
vue3.0中使用element的完整步骤
2021/03/04 Vue.js
[50:20]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第四局
2016/03/06 DOTA
轻松实现python搭建微信公众平台
2016/02/16 Python
详解Python3.6安装psutil模块和功能简介
2018/05/30 Python
python之验证码生成(gvcode与captcha)
2019/01/02 Python
搭建python django虚拟环境完整步骤详解
2019/07/08 Python
Python 一键获取百度网盘提取码的方法
2019/08/01 Python
Django 简单实现分页与搜索功能的示例代码
2019/11/07 Python
Python测试Kafka集群(pykafka)实例
2019/12/23 Python
解决pyinstaller打包运行程序时出现缺少plotly库问题
2020/06/02 Python
美国购买体育、音乐会和剧院门票网站:SelectATicket
2019/09/08 全球购物
感恩教育活动总结
2014/05/05 职场文书
乐观自信演讲稿范文
2014/05/21 职场文书
学期个人工作总结
2015/02/13 职场文书
2015年教师业务工作总结
2015/05/26 职场文书
三八节活动简报
2015/07/20 职场文书
被委托人身份证明
2015/08/07 职场文书
yolov5返回坐标的方法实例
2022/03/17 Python