Php 正则表达式:使所有URL成为绝对URL

Php 正则表达式:使所有URL成为绝对URL,php,regex,Php,Regex,我需要一种方法来采取HTML代码块,并使所有的网址绝对。我曾尝试采用各种正则表达式示例,但没有成功。这些是要求: 替换HREF和SRC URL 如果URL已经是绝对的,请保留它 如果URL是绝对的,则替换它 每个HTML都来自一个已知的URL(example.com/folder/file.HTML),可用于创建绝对URL。例如: src=“image.png”变为src=”http://example.com/folder/image.png" href=“/home.html”变成hre

我需要一种方法来采取HTML代码块,并使所有的网址绝对。我曾尝试采用各种正则表达式示例,但没有成功。这些是要求:

  • 替换HREF和SRC URL
  • 如果URL已经是绝对的,请保留它
  • 如果URL是绝对的,则替换它
每个HTML都来自一个已知的URL(example.com/folder/file.HTML),可用于创建绝对URL。例如:

src=“image.png”变为src=”http://example.com/folder/image.png" href=“/home.html”变成href=”http://example.com/home.html"

我找到了一个函数,它正好满足我的需要:

但我不知道如何在一个代码块中批量处理所有URL

任何帮助都会很好

干杯。

-您要做的是使用SGML或XML解析器,并在相关元素属性上使用正则表达式。

类似的方法可能会奏效


如果html包含“href”或“src”外部标记,则此操作将失败,如
如何使用“src=“
”。这就是为什么人们通常建议对html使用专用的解析器,而不是regexp。

Hehe。我明白了。目前,这是一个实验性的破解,但我肯定会在将来考虑一个合适的解析器。谢谢。据我所知,这是一种享受。我知道html中的正则表达式永远不会是完美的,但这将暂时起作用。谢谢你的快速回复!可能的重复:略有不同,但解决方案(使用基本标记)在这种情况下也适用。
  $html = preg_replace_callback(
      '~((href|src)\s*=\s*[\"\'])([^\"\']+)~i', 
      'replace', 
      $html);

  function replace($x) {
     $url = $x[3];
     $url = your_url_conversion_function($url);
     return $x[1] . $url;
  }