我需要一种方法来获取HTML代码块并使所有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
但我无法弄清楚如何批量处理代码块中的所有网址。
任何帮助都会很棒!
干杯。
答案 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的原因。