有很多关于在 PHP 中转换相对于绝对路径的帖子。我正在寻找这些帖子之外的具体实现(希望如此)。谁能帮我解决这个具体的实现问题?
我有一个包含各种 HTML 的 PHP 变量,包括包含相对 URL 的 href
和 img
。主要是(例如)/en/discover
或 /img/icons/facebook.png
我想以这样一种方式处理这个 PHP 变量,即我的 href
和 img
的值将被转换为 http://mydomain .com/en/discover
和 http://mydomain.com/img/icons/facebook.png
我相信下面的问题涵盖了 href
的解决方案。我们如何扩展它以同时考虑 img
?
正则表达式是否合适?或者因为我们正在处理大量输出,所以我们应该使用 DOMDocument 吗?
最佳答案
经过进一步研究后,我偶然发现了 Gerd Riesselmann 的这篇文章,内容涉及如何解决 RSS 提要缺少 base href
解决方案的问题。 他的代码片段实际上解决了我的问题!
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;
}
?>
谢谢歌德!感谢 shadyyx 为我指出 base href
的方向!
关于PHP:在输出中查找具有相对路径的图像和链接并将它们转换为绝对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13457693/