我有以下代码来删除Magento网站中的空白区域。
ob_start("htmlcompress");
function htmlcompress($buffer) {
$buffer = preg_replace('/\n\r|\r\n|\n|\r|\t| {2}/', '', $buffer);
return $buffer;
}
它运行良好,但在某些使用内联javascripts的区域中,脚本停止工作。例如,在“checkout / onepage / billing.phtml”中:
<script type="text/javascript">
//<![CDATA[
$('billing:region_id').setAttribute('defaultValue', "<?php
echo $this->getAddress()->getRegionId()
?>");
//]]>
</script>
和“giftmessage / inline.phtml”禁用了toogle功能;还有“payment / form / cc.phtml”,其中单选按钮用于付款选项。
并非所有内联脚本都被禁用,例如,任何以“var”开头的东西都在工作。
如何改进压缩脚本以防止javascript停止工作?
由于
答案 0 :(得分:2)
你正在重塑已经完成的工作。
首先有minify,其中包含用于执行此操作的PHP类。 Fooman Speedster将minify库用于Javascript和CSS,但是错过了HTML部分,可能会修改此行为。
然后有mod_pagespeed内置它,编译所以运行速度比PHP快,适用于整个服务器,因此来自其他脚本/源的页面会受到影响。特别是你应该感兴趣的是whitespace collapse。
答案 1 :(得分:0)
谢谢!您的代码删除了所有空格,因此也破坏了样式。 我知道Fooman Speedster,不幸的是它不适用于许多客户的共享服务器。
@clockworkgeek,我也知道你发布的脚本,类似于Fooman Speedster,它们不适用于所有共享服务器,虽然有些工作但结果不可靠,因为它会影响某些页面,我猜是类似于我发布的minify脚本,导致javascript和空白问题。在其他情况下,它会导致内存损坏。
我的主机正在努力获取共享服务器的mod_pagespeed。
答案 2 :(得分:-1)
问题是不是代码感知正则表达式。您可以将缩小过程分为两部分。划分空格和条纹换行符。
例如:
$buffer = preg_replace('/^(?!\/{2})(.*)[\n\r|\r\n|\n|\r]/m', '$1', $buffer);
然后只需要删除不必要的空格。像标签和两个或多个空格。
$buffer = preg_replace('/[\t| {2}]/', '', $buffer);
另外,请检查Fooman Speedster扩展程序。