2011-06-04 20 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