我有以下缩小功能:
public static function minify($buffer)
{
$search = array(
'/\>[^\S ]+/s',
'/[^\S ]+\</s',
'/(\s)+/s'
);
$replace = array(
'>',
'<',
'\\1'
);
$buffer = preg_replace($search, $replace, $buffer);
return $buffer;
}
此函数与 ob_start() 一起使用,以缩小我的 html 输出。该函数取自此处:https://stackoverflow.com/a/6225706/4601581
这个函数好像毁了我的一些JS。示例:我单击一个按钮来执行一些 JS:
<button type="button" class="btn btn-<?= Config::$ELEMENT_COLOR ?> btn-block" onclick="addLastInput(<?= $mask->getId() ?>)">Do it</button>
我给addLastInput的$id
只是一个数字,取自$mask->getId()
。
我还有这个小 JS 代码来填充一些数据数组:
<script>lastSubmissionData[<?=$mask->getId()?>] = '<?=json_encode($lastSubmissionData)?>';</script>
最后,我实际上想使用给定的参数(id)和数据数组来执行我的 JS 函数:
function addLastInput(maskId) {
var data = lastSubmissionData[maskId];
for (var i = 0; i < data.length; i++) {
// TODO
}
}
每当我只加载页面时,它只会在 Chrome 控制台中告诉我Uncaught SyntaxError: Unexpected end of input
。每当我这样做而不使用 minify 函数并完全注释 ob_start() 时,它就可以工作并且我可以使用它。
结论:正如链接 SO 答案的评论所暗示的那样,minify 函数似乎阻止了我的内联 JS。问题:我该如何解决这个问题?我什至在谷歌上搜索了其他缩小解决方案,例如:https://gist.github.com/tovic/d7b310dea3b33e4732c0
所有这些似乎都无法通过破坏我的网站来发挥作用。让我使用 JS 代码并仍然缩小 html 输出的最佳解决方案是什么?
最佳答案
不要使用这个minify()
功能。它坏了。
此函数最终会删除内联 Javascript 代码中一些语义上有意义的换行符,例如出现在单行注释末尾的换行符。 (例如,它将您的示例 Javascript 函数转换为以 { // TODO } }
结尾的单行。)
这个函数也会破坏一些 HTML 结构。特别是它会破坏<pre>
的内容标签,因为它不认识到空格在该上下文中很重要。
(顺便说一句,这两个警告都在您获得此代码的帖子的高度赞扬的评论中提到了!)
关于javascript - PHP minify 函数似乎破坏了内联 JS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34618943/