PHP 版的 Javascript 压缩混淆工具 [ Dean Edwards Packer ]

作者: Nicolas Martin     来源: joliclic.free.fr     时间: 2007-01-20 02:12:06
摘要: Dean Edwards Packer  是个非常有名的 Javascript 压缩/混淆工具,有 .NET / PERL / WSH / PHP 等几种版本, 而本文介绍的 就是Nicolas Martin 发布的 PHP 版。

另外,本站已经运行此 PHP 版本,如果有需要在线压缩的请访问:
http://www.codebit.cn/packer.php
归类: Javascript, PHP/MySQL,

关键词: packer, php, 混淆, compress, 压缩, javascript,


Dean Edwards 's Packer  是个非常有名的 Javascript 压缩/混淆工具,有 .NET / PERL / WSH / PHP 等几种版本, 而本文介绍的 就是Nicolas Martin 发布的 PHP 版。

另外,本站已经运行此 PHP 版本,如果有需要在线压缩的请访问:
http://www.codebit.cn/packer.php


本说明文档译自:
http://dean.edwards.name/packer/usage/

使用说明:


所有声明,包括 function 函数定义,必须以分号结尾,示例代码:

Javascript:
  1.  
  2. // sample code
  3.  
  4. var $input, $output;
  5.  
  6. // notice the semi-colon at the END of function declarations
  7.  
  8. onload = function() {
  9. $input = document.getElementById("input");
  10. $output = document.getElementById("output");
  11. _clearAll(true);
  12. };
  13.  
  14. function _packScript() {
  15. $output.value = pack($input.value);
  16. };
  17.  
  18. function _clearAll($focus) {
  19. $output.value = $input.value = "";
  20. // the "if" statement is NOT terminated with a semi-colon
  21. if ($focus) {
  22. $input.focus();
  23. }
  24. };
  25.  



参数:


Encoding


设置压缩/混淆的级别:

None

    简单压缩,移除空格和注释,编码特殊字符,

Numeric (Base 10)

    所有字符将转换成数字。

Normal (Base 62)

    所有字符将转换成数字字母,这个是推荐设置。

High ASCII (Base 95)

    将获得更高的压缩比率。(文件更小)

    如果你使用这个选项,那么压缩后的代码必须使用 ISO-8859-1 编码,这是由于一个 IE 的 BUG 所致,内容页也需要同样的编码,如果你不能确定,那就使用 "Normal" 。


快速还原 (Fast Decode)


    选中此选项,将插入一小段代码(120 bytes),以使代码能够更快的还原(decode)。


特殊字符 (Special Characters)


    为了让压缩能区分全局变量和局部变量,压缩工具会将变量转换成下面的格式,由于 Javascript 并不存在确切意义上的全局变量和局部变量,我用下面的方式定义:

局部变量 Local ($)
    变量只在当前范围内有效,参数和函数内部的变量就是一个典型例子,将局部变量用 $ 标识,压缩时会截取他们的第一个字符,附加的 $ 将使截取的字符加长,数字将会被保留。

Javascript:
  1.  
  2. // unpacked:
  3. function test($left, $top1, $top2, $$length) {
  4. // do something
  5. };
  6. // packed:
  7. function test(l,t1,t2,le){};
  8.  


注意不要让命名冲突,美元标记截取只针对局部变量。


全局变量 Private (_)
全局变量可以在整个代码中使用,用 “ _ ” (下划线)来标识,有下划线标识的全局变量将会被转换成下划线加上一个数字:

Javascript:
  1.  
  2. // unpacked:
  3. var _CONSTANT = 42;
  4. function _test($left, $top1, $top2, $$length) {
  5. return ($top1 / $top2) + _CONSTANT;
  6. };
  7. // packed:
  8. var _0=42;function _1(l,t1,t2,le){return(t1/t2)+_0};
  9.  



调试代码 Debug Code (;;;)
三个“;” (分号)将被当成一个单行注释,比如:
Javascript:
  1.  
  2. ;;; alert("TEST!");
  3.  

上面的代码在压缩时将被移除。


平台(Platforms)


压缩后的代码能够正常运行在所有支持 JavaScript 的浏览器,只有很少的 javascript 技术被用于还原代码。

有些浏览器不支持压缩,只有支持 DOM 才能正常运行,Legacy 浏览器将显示一个禁用的界面。


关于 PHP 版的详细信息请浏览:
http://www.codebit.cn/packer.php

下载地址:
http://www.codebit.cn/packer/packer.php-1.0.zip






推荐链接:(联系 QQ :326801485)