html引用js动态版本号,将版本号添加到HTML文档中的.js和.css引用的正则表达式

我有一个HTML文档,我想自动将版本号添加到所有脚本和样式表引用中。将版本号添加到HTML文档中的.js和.css引用的正则表达式

以下应更换

其中123456是我的动力版本号。

但768,16只做上

应保持不变的本地文件。

到目前为止,我有以下的正则表达式:

$html = preg_replace('#(src|href)=("|\')(?!http)(?!("|\'| |\+))(.*)\.(css|js|swf)("|\')#Ui', '\\1=\\2\\3\\4.v'.$version .'.\\5\\6', $html);

但它不工作100%,我相信存在这样一种更好的方式。 你会如何写它?

编辑:

我现在使用DOM文档,但事实证明,这是很慢!

//------- snip --------------

$host = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'];

$refs = array();

$version = "v". $version;

$doc = new DOMDocument();

$tmpDoc = $html;

$doc->loadHTML($tmpDoc);

$xpath = new DOMXPath($doc);

foreach($xpath->query('/html/head/link/@href') as $href) {

$ref = $href->value;

if(

!preg_match('/^https?:/', $ref) ||

strpos($ref, $host) === 0

) {

$refs[$ref] = preg_replace('/\.css$/', '.'.$version.'$0', $ref);

}

}

foreach ($xpath->query('//script/@src') as $src) {

$ref = $src->value;

if(

!preg_match('/^https?:/', $ref) ||

strpos($ref, $host) === 0

) {

$refs[$ref] = preg_replace('/\.js$/', '.'.$version.'$0', $ref);

}

}

$html = str_replace(

array_keys($refs),

array_values($refs),

$tmpDoc

);

//------- snip --------------

?>

2010-02-11

Alex

+0

您可以快速(将'.css“简单地替换为'.12345.css”'),或者您可以拥有正确的(DOM解析,步行和重新序列化)。你不能同时拥有两种:这种后处理不是一项简单的任务。如果你需要快速和正确的话,你必须改变生成这个标记的模板。 –

2010-02-11 14:46:07

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值