我想把javascript文件合并成一个单独的文件,以减少对服务器的请求量。因为没有插件,所以我想自己编写一些代码。不幸的是,CMS没有中央功能来包含javascript文件,这些文件可以被重写或类似的东西。因此,在php将输出打印给用户之前,我不得不搜索并替换源代码中的script-tag。
为了获得链接,我编写了一个regex-pattern,它匹配任何带有src-attribute的script-tag:
$scriptTagPattern = '#<script (?:.+)?src="([^"]+)">#'; 我认为这应该是正确的,因为有不同的脚本标签。而且我会在模板解析之前从模板获取源代码,所以src-attribute也可以包含php-code,如下所示:
<script type="text/javascript" src="' . $options['baseurl'] . '/scripts/somejsfile.js"></script>我的模式正在发挥作用,但只是部分有效。例如,匹配以下脚本:
http://code.jquery.com/jquery-2.1.0.min.js
/scripts/yui/yuiloader-dom-event/yuiloader-dom-event.js但以下内容不匹配:
<script type="text/javascript" src="scripts/read_marker.js?v=' . $options['simpleversion'] . '"></script>我不明白为什么我的模式在这里不匹配。例如,yuiloader (参见上面的示例)具有与read_marker脚本类似的以下源代码:
<script type="text/javascript" src="' . Template::fetchStylevar("yuipath") . '/yuiloader-dom-event/yuiloader-dom-event.js"></script>发布于 2014-03-12 22:51:27
使用正则表达式从HTML或XML文档中提取信息被认为是不好的做法,因为现实文档中的正则表达式很脆弱且难以维护。使用PHP DOMDocument中的DOM解析器来完成以下操作:
$doc = new DOMDocument();
$doc->loadHTML($YOUR_HTML);
foreach($doc->getElementsByTagName('script') as $script) {
if($script->hasAttribute('src')) {
echo $script->getAttribute('src') . PHP_EOL;
}
}发布于 2014-03-13 07:27:33
我解决了这个问题:正则表达式很好,我使用preg_match()而不是preg_match_all(),所以我只得到了每个模板中的第一个文件。简单但有效。
https://stackoverflow.com/questions/22355097
复制相似问题