PHP:在输出中查找具有相对路径的图像和链接,并将它们转换为绝对路径

cho*_*ata 9 php image relative-path absolute-path src

在PHP中转换相对于绝对路径的帖子很多.我正在寻找超出这些帖子的具体实现(希望如此).有谁可以帮我解决这个具体的实施?

我有一个包含不同HTML的PHP​​变量,包括包含相对URL的hrefs和imgs.主要是(例如)/en/discover/img/icons/facebook.png

我想以这样一种方式处理这个PHP变量,即我的hrefs和imgs 的值将被转换为http://mydomain.com/en/discoverhttp://mydomain.com/img/icons/facebook.png

我相信下面的问题涵盖了hrefs 的解决方案.我们怎样才能扩展这个以考虑imgs?

正则表达式是否有序?或者因为我们处理大量输出应该使用DOMDocument?

cho*_*ata 9

经过一些进一步的研究后,我偶然发现了Gerd Riesselmann关于如何解决缺少base hrefRSS-feeds解决方案的这篇文章.他的片段实际上解决了我的问题!

http://www.gerd-riesselmann.net/archives/2005/11/rss-doesnt-know-a-base-url

<?php
function relToAbs($text, $base)
{
  if (empty($base))
    return $text;
  // base url needs trailing /
  if (substr($base, -1, 1) != "/")
    $base .= "/";
  // Replace links
  $pattern = "/<a([^>]*) " .
             "href=\"[^http|ftp|https|mailto]([^\"]*)\"/";
  $replace = "<a\${1} href=\"" . $base . "\${2}\"";
  $text = preg_replace($pattern, $replace, $text);
  // Replace images
  $pattern = "/<img([^>]*) " . 
             "src=\"[^http|ftp|https]([^\"]*)\"/";
  $replace = "<img\${1} src=\"" . $base . "\${2}\"";
  $text = preg_replace($pattern, $replace, $text);
  // Done
  return $text;
}
?>
Run Code Online (Sandbox Code Playgroud)

谢谢Gerd!谢谢shadyyx指出我的方向base href!