修复curl页面上的链接

时间:2011-05-17 14:50:37

标签: php curl

所以在问到问题后,人们不明白我在问什么......

<?php

$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, 'http://www.mybroadband.co.za/news/');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$curl_response = curl_exec($ch);
curl_close($ch);

//Echo page back
echo $curl_response;

?>

请运行该脚本。在你的地址栏中你会看到.. wwww.localhost / thisscriptname.php 现在点击一个链接。看看你的地址栏。它重定向到www.mybroadbank.co.za/xyz

我不希望它重定向到那里。我希望它通过curl获取链接内容并在www.localhost / thisscriptnameoranyname.php上显示

请帮忙。 感谢

3 个答案:

答案 0 :(得分:1)

这是因为cURL Response带来了该URL的所有html代码并应用到您当前的页面中。因此,返回到您网页的所有链接都会链接到目标网址(http://www.mybroadband.co.za/)。这会在响应中产生类似的结果:

<a href="http://www.mybroadband.co.za/xyz">XYZ</a>
<a href="http://www.mybroadband.co.za/abc">ABC</a>

因此,当您点击这些链接时,它会引导您转到http://www.mybroadband.co.za/something。您需要的是不要重定向到这些页面,而是在本地主页中显示内容?假设我是对的。

因此,为了解决此问题,您需要编辑cURL响应,其中转换上面的HTML锚标记(链接)到:

<a onClick="getPage('http://www.mybroadband.co.za/xyz')">XYZ</a>
<a onClick="getPage('http://www.mybroadband.co.za/abc')">ABC</a>

然后只需在Javascript中编写一个getPage($link)函数,使用AJAX从$ link请求页面并返回,就像你所做的一样。

答案 1 :(得分:0)

解释发生了什么: 它完全符合你的要求。 但是浏览器会解释HTML,因此您可以看到该页面。如果您想查看实际的HTML代码,请使用echo htmlspecialchars($curl_response);。将其放在文本区域可能无法产生正确的结果。

如果您想要替换HTML代码中的所有链接以使其保留在您的页面上,那么这是一个完全不同的球赛。您将需要解析HTML代码并使用preg_replace和str_replace等替换它们。

答案 2 :(得分:0)

从检索到的文本的标题中删除<base>标记。这导致所有链接都基于原始网站,而不是您的代理版本:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
    <head>
    <base href="http://mybroadband.co.za/news/" />
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--- remove this line

但是,如果您只是盲目地浏览文本而没有做任何事情,那么您应该将其放入iframe并将带宽保存在服务器上。