3

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

<img src="puppies.jpg">

需要变成:

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

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

我正在使用 PHP,并假设我需要通过preg_replace(). 帮助!谢谢!

4

2 回答 2

8

不是正则表达式的工作。这是 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();
于 2012-04-30T19:10:30.480 回答
0

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

不,不是。如果只想给每个src属性加前缀,最好用简单的字符串函数,别想xml、regex或dom解析……</p>

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

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

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

如果可以避免,请不要使用 regexp/dom 破坏您的代码。

于 2012-04-30T19:13:43.897 回答