使用PHP更改html页面上链接的域

使用PHP更改html页面上链接的域,php,html,proxy,Php,Html,Proxy,我正在为一个项目创建一个代理网站,它可以正常工作,但我需要更改我的网站加载页面上的所有链接,以便它们通过我的网站,而不是重定向到我加载的页面 inbrowser.fluffycraft.net是我正在使用的站点。如果你加载一个页面并点击一个链接,它会重定向到网站,这很糟糕,有人知道我怎么做吗 谢谢 格斯。这不是一个很小的问题。像这样的一些网站做得很好。这种复杂性来自这样一个事实:代理通常不只是想重定向链接,还想重定向表单、资源、flash对象等 通常,您使用HTML解析器并在DOM中迭代查找具有

我正在为一个项目创建一个代理网站,它可以正常工作,但我需要更改我的网站加载页面上的所有链接,以便它们通过我的网站,而不是重定向到我加载的页面

inbrowser.fluffycraft.net是我正在使用的站点。如果你加载一个页面并点击一个链接,它会重定向到网站,这很糟糕,有人知道我怎么做吗

谢谢


格斯。

这不是一个很小的问题。像这样的一些网站做得很好。这种复杂性来自这样一个事实:代理通常不只是想重定向链接,还想重定向表单、资源、flash对象等

通常,您使用HTML解析器并在DOM中迭代查找具有URL的内容,如锚定标记、表单元素等。读取URL并将其替换为URL,并使用原始URL作为查询参数

<a href="http://example.com"></a>

变成

<a href="http://foo.bar/proxy?target=http%3A%2F%2Fexample.com"></a>


正如其他人所提到的,您可能会使用正则表达式,但您可能会错过一些东西,因为。

我假设您正在使用file_get_contents()获取链接到的页面的整个源代码,并简单地输出结果

您要做的是在输出结果之前对结果使用preg_match_all()将任何看起来像链接的内容替换为您自己的链接

编辑1

我同意给出的另一个答案,即regex可能是一个雷区,有这样的东西。解析DOM也很有挑战性。一个有趣的替代方法是按原样输出源代码,但注入一些JavaScript/jQuery,这将是与DOM交互的一种更简单的方法。脚本可以简单地修改它找到的任何锚标记的href属性

除非有人抢先一步,否则我以后一定会写的

编辑2

给你。我已经在一些链接上进行了测试,看起来不错。显然,这取决于访问者是否启用了javascript,但在我看来,这似乎是最简单的“一刀切”解决方案

<script>
$(function(){
    $("a").each(
        function(){
            oldlink = $(this).attr("href");
            insertpoint = oldlink.indexOf("//") + 2;
            if (insertpoint = 2) {
                insertpoint = 0;
            }
            newlink = oldlink.substr(0,insertpoint) + "www.mywebsite.com/myscript.php?link=" + encodeURIComponent(oldlink.substr(insertpoint));
            $(this).attr("href",newlink);
        }
    );
});
</script>

$(函数(){
$(“a”)。每份(
函数(){
oldlink=$(this.attr(“href”);
insertpoint=oldlink.indexOf(“/”)+2;
如果(插入点=2){
插入点=0;
}
newlink=oldlink.substr(0,insertpoint)+“www.mywebsite.com/myscript.php?link=“+encodeURIComponent(oldlink.substr(insertpoint));
$(this.attr(“href”,newlink);
}
);
});
不要忘了包括jQuery,这样才能工作

在这里下载

或者像这样包括它

<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>


您尝试过什么?为什么不尝试类似str_replace for php或使用javascript或jQuery来更改锚定标记的src?