2010-04-15 1241 views
0

我想加载一个HTML文档并用PHP修改它的文本。例如,如果我有这样的文档:在PHP中动态修改HTML网页的内容

<html> 
<head><title>Test - Example.com</title></head> 
<body> 
<p><a href="http://www.example.com">Link number 1: Example.com</a></p> 
<p>Link number 2: Example.com - some random text</p> 
</body> 
</html> 

我想添加一个活动链接()到第二段。但是我不想触摸出现Example.com字符串的其他地方,如第一段或文档的标题。所以我不能使用正则表达式,因为我需要考虑文档的结构。有关如何解决这个问题的任何想法?此外,我将收到的HTML文档可能是实时网页,因此它们可能包含错误,JavaScript代码等。

+0

该段落的搜索条件是什么?我不确定,我明白为什么你不能使用正则表达式,当然XPath会是更好的选择,但你会说:页面可能包含错误/无效的XML ... – Hinek 2010-04-15 13:36:31

+0

你是什么状态寻找以确定什么成为一个链接,还有什么未被触动? – ForCripeSake 2010-04-15 14:48:23

+0

我只想更改标准文本,不要触及超链接或HTML注释,脚本,URL等内容。 – pako 2010-04-16 18:16:11

回答

1

“正确”的方法是通过PHP的DOM对象,该对象可以导入HTML,之后你可以使用XPath来挖掘你想要的确切链接。当然,DOM对于无效标记非常挑剔,并且可以禁止浏览器很好地处理相当简单的错误。您可能需要按摩输入以修复最糟糕的错误,然后才能通过DOM对内容进行往返。

我发现的最糟糕的stop-dead-in-DOM's-track错误是有多个html和/或body block(例如一个愚蠢的服务器在实际页面内容之前插入一个自包含的<html>块)。