2010-04-15 1247 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>塊)。