【问题标题】:REGEX: Make all URLs absolute正则表达式:使所有 URL 都是绝对的
【发布时间】:2010-08-12 01:07:18
【问题描述】:

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

  • 同时替换 HREF 和 SRC 网址
  • 如果 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"

我找到了一个完全符合我需要的函数:

http://nashruddin.com/PHP_Script_for_Converting_Relative_to_Absolute_URL

但我不知道如何批量处理代码块中的所有 URL。

任何帮助都会很棒!

干杯。

【问题讨论】:

标签: php regex


【解决方案1】:

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

【讨论】:

  • 呵呵。取点。目前,这是一个实验性的 hack,但我将来肯定会考虑使用合适的解析器。谢谢。
【解决方案2】:

类似的东西可能工作

  $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 使用专门的解析器,而不是正则表达式。

【讨论】:

  • 据我所知,这是一种享受。我知道 html 中的正则表达式永远不会完美,但这暂时可以解决问题。感谢您的快速回复!
猜你喜欢
  • 2011-11-24
  • 2011-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-30
  • 2010-11-17
  • 2018-12-13
相关资源
最近更新 更多