服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服务器之家 - 编程语言 - PHP教程 - 在PHP中实现Javascript的escape()函数代码

在PHP中实现Javascript的escape()函数代码

2019-11-06 11:05php教程网 PHP教程

在 Javascript 中,可以利用 escape/unescape() 和 eval_r() 函数进行简单的转码处理,让普通的 URL 网址看起来比较怪异,使那些令人讨厌的搜索爬虫无法辨认你希望隐藏的资源。

这里,一般都需要预先将正常的字符串编码成 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 IN_ARRAY 函数使用注意事项

    PHP IN_ARRAY 函数使用注意事项

    其实关键还是因为 php是弱类型语言,php进行比较的时候 最好还是使用strict方法的。因为这样不但比较两者的值是否一直,还会比较两者的类型是否一直。...

    php教程网3912019-11-05
  • PHP教程PHPMailer ThinkPHP实现自动发送邮件功能

    PHPMailer ThinkPHP实现自动发送邮件功能

    这篇文章主要为大家详细介绍了PHPMailer ThinkPHP实现自动发送邮件功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 ...

    wenjayLiu2502019-09-27
  • PHP教程用PHP为SHOPEX增加日志功能代码

    用PHP为SHOPEX增加日志功能代码

    由于我的空间服务商并没有提供IIS的日志功能。虽然页面上放了CNZZ的站点统计,可是详细的页面访问量和访问来源仍然表现的不够彻底。 ...

    php教程网4192019-11-03
  • PHP教程thinkPHP3.2.3实现阿里大于短信验证的方法

    thinkPHP3.2.3实现阿里大于短信验证的方法

    这篇文章主要介绍了thinkPHP3.2.3实现阿里大于短信验证的方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下 ...

    zhanglichao01032242019-09-28
  • PHP教程PDO::setAttribute讲解

    PDO::setAttribute讲解

    今天小编就为大家分享一篇关于PDO::setAttribute讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    php参考手册4082019-06-25
  • PHP教程PHP命名空间与自动加载类详解

    PHP命名空间与自动加载类详解

    这篇文章主要介绍了PHP命名空间与自动加载类,结合实例形式详细分析了php自动加载类与命名空间原理、使用方法及相关操作注意事项,需要的朋友可以参考...

    NameWFY1202019-09-08
  • PHP教程Laravel框架实现利用中间件进行操作日志记录功能

    Laravel框架实现利用中间件进行操作日志记录功能

    这篇文章主要介绍了Laravel框架实现利用中间件进行操作日志记录功能,结合实例形式分析了Laravel框架中间件的创建、引入以及使用中间件进行操作日志记录...

    偶-木3652019-09-28
  • PHP教程PHP+Ajax实现上传文件进度条动态显示进度功能

    PHP+Ajax实现上传文件进度条动态显示进度功能

    这篇文章主要介绍了PHP+Ajax实现上传文件进度条动态显示进度功能,通过ajax实现主界面,php处理上传文件,具体实例代码大家跟随脚本之家小编一起看看吧...

    地雷02272019-09-29