Php 单击外部链接时,如何模拟facebook的行为
基本上,我想做的是,因为我为我的用户提供了在我的网站上分享评论和帖子的能力,当用户点击外部链接时,我的网站可以打开我页面中的页面。有点像facebook。您将看到整个站点,而facebooks的小导航栏将保留在您刚刚打开的站点顶部 我想复制此行为,以便在用户共享的链接无效或恶意时,我可以缓和这些链接。所以我可以关掉它们。现在,我已经捕获了链接,并将它们存储在每个用户每个链接的基础上,这样我就可以根据需要进行调节。但是为了让我的用户当前标记一个站点,他们必须回到我的站点,并遵循一个乏味的过程。我想做的是提供一个迷你导航,当用户需要时,基本上可以选择在上面标记。这也是一种让他们直接链接到我的网站的方法 所以我想找出最好的方法。我是应该通过卷曲之类的方式来提取页面的全部内容,还是应该将其置于类似框架的设置中。或者,在一个对桌面浏览器和移动浏览器都友好的跨平台和跨浏览器环境中,最好的方法是什么。我可以预见,如果我做一些像cURL这样的事情,有人会恶意地把我搞砸,因为他们所要做的就是在某个地方转储一些恶意代码,因为我的网站会把它捡起来,然后通过一个脚本拉出来,也许这会破坏我的网站。我不知道,我不经常使用cURL来知道是否存在任何重大风险Php 单击外部链接时,如何模拟facebook的行为,php,html,curl,Php,Html,Curl,基本上,我想做的是,因为我为我的用户提供了在我的网站上分享评论和帖子的能力,当用户点击外部链接时,我的网站可以打开我页面中的页面。有点像facebook。您将看到整个站点,而facebooks的小导航栏将保留在您刚刚打开的站点顶部 我想复制此行为,以便在用户共享的链接无效或恶意时,我可以缓和这些链接。所以我可以关掉它们。现在,我已经捕获了链接,并将它们存储在每个用户每个链接的基础上,这样我就可以根据需要进行调节。但是为了让我的用户当前标记一个站点,他们必须回到我的站点,并遵循一个乏味的过程。我想
那你说堆叠怎么样?某种卷曲方法,框架,其他?有人能给我举个好例子吗?如果你使用框架,那么一些网站可以跳出框架。如果您使用CURL,您需要解析所有URL(链接、图像、脚本、css),并将它们更改为您自己的URL,如果您希望将用户保留在您的站点中。所以CURL看起来更可靠,但是它需要你做大量的工作,并且它为你的站点产生了更多的带宽。如果您想要基于CURL的解决方案,可以尝试在网上查找web代理示例 以下是一个基本的工作代码,可以帮助您开始:
$url = isset($_GET['url']) ? $_GET['url'] : 'http://amazon.co.uk/';
$html = file_get_contents2($url);
$doc = new DOMDocument();
@$doc->loadHTML($html);
$xml = simplexml_import_dom($doc);
$host = 'http://' .parse_url($url, PHP_URL_HOST);
$proxy = 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['SCRIPT_NAME'] . '?url=';
$items['a'] = 'href';
$items['img'] = 'src';
$items['link'] = 'href';
$items['script'] = 'src';
foreach ($items AS $tag=>$attr)
{
$elems = $xml->xpath('//' . $tag);
foreach ($elems AS &$e)
{
if (substr($e[$attr], 0, 1) == '/')
{
$e[$attr] = $host . $e[$attr];
}
if ($tag == 'a')
{
$e[$attr] = $proxy . urlencode($e[$attr]);
}
}
}
$xmls = $xml->asXml();
$doc->loadXML($xmls);
$html = $doc->saveHTML();
echo $html;
function file_get_contents2($address)
{
$useragent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1";
$c = curl_init();
curl_setopt($c, CURLOPT_URL, $address);
curl_setopt($c, CURLOPT_USERAGENT, $useragent);
curl_setopt($c, CURLOPT_HEADER, 0);
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($c, CURLOPT_FRESH_CONNECT, 1);
if (!$data = curl_exec($c))
{
return false;
}
return $data;
}