2011-06-04 19 views
1

我正在構建一個PHP應用程序,允許用戶上傳廣告並在特定網站的特定頁面上進行預覽。現在,我通過截取網頁截圖,刪除廣告以及放置自己的廣告來做到這一點。這看起來很愚蠢。如何使用PHP加載外部頁面並替換該頁面上的內容?

什麼是最好的方式來獲取一個URL的內容並替換出現在該頁面上的某個特定的代碼?

回答

5
  • 加載頁源成DOMDocument對象
  • 執行搜索和DOMDocument對象上使用XPath取代

實施例:

<?php 

$dom = new DOMDocument(); 
$dom->strictErrorChecking = false; 
$dom->loadHTMLFile("http://www.example.com"); 

$xpath = new DOMXPath($dom); 

$logoImage = $xpath->query("//div[@id='header-logo']//a//img")->item(0); 
$logoImage->setAttribute('src', 'http://www.google.com/images/logos/ps_logo2.png'); 

$logoLink = $xpath->query("//div[@id='header-logo']//a")->item(0); 
$logoLink->setAttribute('href', 'http://www.google.com/'); 

echo $dom->saveHTML(); 

?> 

的示例加載的example.com源並用google.com的徽標和谷歌鏈接取代徽標。

的代碼沒有任何驗證,但應該是很容易修改爲您的需求:)

+2

實際上,您可以使用帶有* http *流包裝的[DOMDocument :: loadHTMLFile](http://php.net/domdocument.loadhtmlfile)並完全跳過'file_get_contents'步驟。 – netcoder 2011-06-04 04:38:34

+0

是的,我意識到在編寫示例的同時:) – 2011-06-04 04:44:13

1

我不知道完整的情況是怎麼樣,你想執行此操作。 但是基於你的問題,最好的方法是使用Ajax。

通過Ajax傳遞您要顯示的頁面的詳細信息,並在php過濾器頁面中顯示並返回所需的結果。

並且在Ajax請求結束時在特定位置顯示您的結果。

即使在JavaScript中,您也可以根據需要過濾Ajax請求返回的結果。

+0

這一切歸結爲,如果您希望將工作做到客戶端或服務器端,客戶端可能會做更多的工作。 – 2011-06-04 05:00:56

+0

是的尼克拉你是對的。但是當我考慮給定的情況時,它聽起來可能是用戶可能上傳多個廣告,他希望從一個位置查看他的廣告。所以只要把這個留在我腦海中,我就給予了我的回答,贊成客戶端。不過,我個人不會在客戶端進行過濾。我總是在php中準備理想的結果,只是使用js來正確顯示 – tejash 2011-06-04 05:19:37

+0

不要誤解我的意思,客戶端通常對於最終用戶來說更加動態和更好,它只是需要更多的工作:) – 2011-06-04 05:22:09