首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将PHP中的每个Script-Tag与src-Attribute匹配

将PHP中的每个Script-Tag与src-Attribute匹配
EN

Stack Overflow用户
提问于 2014-03-12 22:46:30
回答 2查看 1.6K关注 0票数 0

我想把javascript文件合并成一个单独的文件,以减少对服务器的请求量。因为没有插件,所以我想自己编写一些代码。不幸的是,CMS没有中央功能来包含javascript文件,这些文件可以被重写或类似的东西。因此,在php将输出打印给用户之前,我不得不搜索并替换源代码中的script-tag。

为了获得链接,我编写了一个regex-pattern,它匹配任何带有src-attribute的script-tag:

代码语言:javascript
运行
复制
$scriptTagPattern = '#<script (?:.+)?src="([^"]+)">#'; 

我认为这应该是正确的,因为有不同的脚本标签。而且我会在模板解析之前从模板获取源代码,所以src-attribute也可以包含php-code,如下所示:

代码语言:javascript
运行
复制
<script type="text/javascript" src="' . $options['baseurl'] . '/scripts/somejsfile.js"></script>

我的模式正在发挥作用,但只是部分有效。例如,匹配以下脚本:

代码语言:javascript
运行
复制
http://code.jquery.com/jquery-2.1.0.min.js
/scripts/yui/yuiloader-dom-event/yuiloader-dom-event.js

但以下内容不匹配:

代码语言:javascript
运行
复制
<script type="text/javascript" src="scripts/read_marker.js?v=' . $options['simpleversion'] . '"></script>

我不明白为什么我的模式在这里不匹配。例如,yuiloader (参见上面的示例)具有与read_marker脚本类似的以下源代码:

代码语言:javascript
运行
复制
<script type="text/javascript" src="' . Template::fetchStylevar("yuipath") . '/yuiloader-dom-event/yuiloader-dom-event.js"></script>
EN

回答 2

Stack Overflow用户

发布于 2014-03-12 22:51:27

使用正则表达式从HTML或XML文档中提取信息被认为是不好的做法,因为现实文档中的正则表达式很脆弱且难以维护。使用PHP DOMDocument中的DOM解析器来完成以下操作:

代码语言:javascript
运行
复制
$doc = new DOMDocument();
$doc->loadHTML($YOUR_HTML);

foreach($doc->getElementsByTagName('script') as $script) {
    if($script->hasAttribute('src')) {
        echo $script->getAttribute('src') . PHP_EOL;
    }
}
票数 1
EN

Stack Overflow用户

发布于 2014-03-13 07:27:33

我解决了这个问题:正则表达式很好,我使用preg_match()而不是preg_match_all(),所以我只得到了每个模板中的第一个文件。简单但有效。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22355097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档