正则表达式来改变 相对URL绝对(Regex to change

2019-06-25 08:07发布

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

<img src="puppies.jpg">

需要成为:

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

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

我使用PHP,并假定我需要通过运行这个preg_replace() 救命! 和感谢!

Answer 1:

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

我给DOM文档了一枪。

$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();


Answer 2:

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

都能跟得上它不是。 如果你只是想一个前缀添加到每个src属性,最好用简单的字符串函数,甚至不认为有关XML,正则表达式或DOM解析...

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

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

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

不要用正则表达式/ DOM炸毁你的代码,如果你能避免它。



文章来源: Regex to change relative URLs to absolute