PHP 版的 Javascript 压缩混淆工具 [ Dean Edwards Packer ]
作者:cmscn 日期:2009-09-27
Dean Edwards 's Packer 是个非常有名的 Javascript 压缩/混淆工具,有 .NET / PERL / WSH / PHP 等几种版本, 而本文介绍的 就是Nicolas Martin 发布的 PHP 版。
使用说明:
所有声明,包括 function 函数定义,必须以分号结尾,示例代码:
Javascript: // sample code var $input, $output; // notice the semi-colon at the END of function declarations onload = function() { $input = document.getElementById("input"); $output = document.getElementById("output"); _clearAll(true); }; function _packScript() { $output.value = pack($input.value); }; function _clearAll($focus) { $output.value = $input.value = ""; // the "if" statement is NOT terminated with a semi-colon if ($focus) { $input.focus(); } };
参数:
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: // unpacked: function test($left, $top1, $top2, $$length) { // do something }; // packed: function test(l,t1,t2,le){};
注意不要让命名冲突,美元标记截取只针对局部变量。
全局变量 Private (_)
全局变量可以在整个代码中使用,用 “ _ ” (下划线)来标识,有下划线标识的全局变量将会被转换成下划线加上一个数字:
Javascript: // unpacked: var _CONSTANT = 42; function _test($left, $top1, $top2, $$length) { return ($top1 / $top2) + _CONSTANT; }; // packed: var _0=42;function _1(l,t1,t2,le){return(t1/t2)+_0};
调试代码 Debug Code (;;;)
三个“;” (分号)将被当成一个单行注释,比如:
Javascript: ;;; alert("TEST!");
上面的代码在压缩时将被移除。
平台(Platforms)
压缩后的代码能够正常运行在所有支持 JavaScript 的浏览器,只有很少的 javascript 技术被用于还原代码。
有些浏览器不支持压缩,只有支持 DOM 才能正常运行,Legacy 浏览器将显示一个禁用的界面。
评论: 0 | 引用: 0 | 查看次数: 1292
发表评论