2010-08-12 39 views
4

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

  • 更换两个HREF和SRC的URL
  • 如果URL已经是绝对的,把它
  • 如果URL是绝对的,更换

每个HTML来自已知网址(example.com/folder/file.html),可用于创建绝对网址。例如:

src =“image.png”变成src =“http://example.com/folder/image.png” href =“/ home.html”变成href =“http://示例.COM//home.html”的

我已经找到了一个函数,它不正是我需要的:

http://nashruddin.com/PHP_Script_for_Converting_Relative_to_Absolute_URL

但我无法弄清楚如何做到这一点散装的,在所有的网址一块代码。

任何帮助将是伟大的!

干杯。

+0

可能的重复:http://stackoverflow.com/questions/2869844/regex-to-replace-relative-link-with-root-relative-link – 2010-08-12 03:30:04

+0

它略有不同,但解决方案(使用基本标记)也适用于这种情况。 – 2010-08-13 04:57:30

回答

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提供专用解析器而不是正则表达式的原因。

+0

据我所见,这是一种享受。我知道HTML中的正则表达式永远不会是完美的,但这会暂时解决这个问题。感谢您的快速回复! – 2010-08-12 01:54:20

3

Don't use regular expressions to parse (X)HTML - 您想要做的就是使用SGML或XML解析器,并在相关元素属性上使用正则表达式。如果您的HTML中包含的 “href” 或 “SRC” 之外的标签,如<h1> how to use "src=" </h1>

+0

呵呵。采取的点。目前,这是一个实验性的黑客攻击,但我肯定会在将来考虑一个合适的解析器。谢谢。 – 2010-08-12 01:53:05