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

标签 php image relative-path src absolute-path

有很多关于在 PHP 中转换相对于绝对路径的帖子。我正在寻找这些帖子之外的具体实现(希望如此)。谁能帮我解决这个具体的实现问题?

我有一个包含各种 HTML 的 PHP 变量,包括包含相对 URL 的 hrefimg。主要是(例如)/en/discover/img/icons/facebook.png

我想以这样一种方式处理这个 PHP 变量,即我的 hrefimg 的值将被转换为 http://mydomain .com/en/discoverhttp://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/

相关文章:

php - 将单列查询值拆分为不同的 php 变量

javascript - Jquery加载特定div使按钮不起作用

CSS - 在不支持原始图像时显示替代图像

ios - 如何减小 iOS 中滤镜图像的大小

css - 背景图片在 github 页面上不起作用

php - 检查 mysql 中的 SHA256 哈希密码在登录表单中是否正确不起作用

php - 在 windows/xampp 下使用 postgresql 和 php

java - 在 imageview JavaFx 上显示图像

在 Windows 7 中使用相对路径的 Java 文件类

css - Angular 2 组件无法从外部 css 皮肤加载相对背景图像 url