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/discover和http://mydomain.com/img/icons/facebook.png
我相信下面的问题涵盖了hrefs 的解决方案.我们怎样才能扩展这个以考虑imgs?
正则表达式是否有序?或者因为我们处理大量输出应该使用DOMDocument?
经过一些进一步的研究后,我偶然发现了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!