gpt4 book ai didi

javascript - PHP minify 函数似乎破坏了内联 JS?

转载 作者:行者123 更新时间:2023-12-03 08:00:14 25 4
gpt4 key购买 nike

我有以下缩小功能:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com