正则表达式将<img/>相对URL更改为绝对

时间:2012-04-30 19:06:50

标签: php regex preg-replace

我需要查看HTML字符串并将<img>属性为相对地址的所有src标记更改为绝对URL。所以这个:

<img src="puppies.jpg">

需要成为:

<img src="http://sitename.com/path/puppies.jpg">

同时忽略<img>属性已经绝对的src标记。

我正在使用PHP并假设我需要通过preg_replace()运行它。救命!谢谢!

2 个答案:

答案 0 :(得分:7)

这是正则表达式的作业。这是XML / DOM解析器的工作。

我会给DOMDocument一个机会。

$DOM = new DOMDocument;
$DOM->loadHTML($html);

$imgs = $DOM->getElementsByTagName('img');
foreach($imgs as $img){
    $src = $img->getAttribute('src');
    if(strpos($src, 'http://sitename.com/path/') !== 0){
        $img->setAttribute('src', "http://sitename.com/path/$src");
    }
}

$html = $DOM->saveHTML();

答案 1 :(得分:0)

  

这不是正则表达式的工作。这是XML / DOM的工作   解析器。

不,不是。如果你只想为每个src属性添加一个前缀,最好使用简单的字符串函数,甚至不要考虑xml,regex或dom解析......

$str = str_replace('<img src="', '<img src="http://prefix', $str);

之后你可以清理错误的链接(已经是绝对的链接)

$str = str_replace('<img src="http://prefixhttp://', '<img src="http://', $str);

如果可以避免,请不要使用regexp / dom炸掉你的代码。