REGEX:使所有网址都是绝对的

时间:2010-08-12 01:07:18

标签: php regex

我需要一种方法来获取HTML代码块并使所有URL绝对。我试图采用各种正则表达式的例子,但没有运气。这些是要求:

  • 替换HREF和SRC网址
  • 如果网址已经是绝对的,请保留
  • 如果网址是绝对的,请将其替换为

每个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”

我找到了一个完全符合我需要的功能:

http://nashruddin.com/PHP_Script_for_Converting_Relative_to_Absolute_URL

但我无法弄清楚如何批量处理代码块中的所有网址。

任何帮助都会很棒!

干杯。

2 个答案:

答案 0 :(得分:3)

Don't use regular expressions to parse (X)HTML - 您要做的是使用SGML或XML解析器,而是在相关元素属性上使用正则表达式。

答案 1 :(得分:1)

像这样可能工作

  $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;
  }

如果您的html包含“href”或“src”外部标记,则会失败,如<h1> how to use "src=" </h1>中所示。这就是人们为html建议专用解析器而不是regexp的原因。