0

我已经使用 AJAX 成功更改了网页的内容。我可以包含我域中的另一个网页,但我遇到的问题是使超链接正常工作。如果超链接使用相对寻址,那么相对于我包含它的页面将不起作用,所以我正在研究 php 以在我读取它时解析 html 标记

我正在使用以下 RegExp/href[\s]?=[\s\"\']+(.*?)[\"\']/im来查找 href 数据,但想要一个关于如何为相对地址添加前缀的指针。

我想用href=" http://foo.bar.com 替换 页面 http://foo.bar.com/folder1/info1/data.html 上的链接 href = "./test1/ page1.html " /folder1/info1/ ./test1/page1.html"那么如果我在http://foo.bar.com/folder2/faraway/another.html中包含/folder1/info1/data.html的页面内容,则链接在嵌入式页面上将正常运行我正在寻找使用 php preg_replace 函数来做到这一点,但很快就被卡住了。如果我在错误的树上吠叫并且有更合适的工具或方法,有人可以指出我正确的方向;-)。也许这一切都可以在Javascript中完成?

4

4 回答 4

2

如果你打算在页面上做更多的 javascript,你可以使用 JQuery。

function make_absolute(base_path){
    $("#embedded a").each(function(){
        this.attr("href",
                  base_path + this.attr("href")
                  );
    });
}

将“#embedded”替换为嵌入页面的 ID。

如果您不打算将 javascript 用于其他任何事情,这几乎肯定是矫枉过正,但如果您打算制作一个闪亮的动态 ajaxy 页面,您可能会考虑它。

奖励:使用 JQuery 进行 ajax 页面加载:

$("#embedded").load(page_you_want_to_load)
于 2009-10-09T23:50:16.700 回答
2

让 ABentSpoon 的响应更进一步,您的 jQuery 选择器可以搜索所有以斜杠开头的锚标记。

$('#embedded a[@href^=/]').each(function() {
    $(this).attr('href', baseUrl + $(this).attr('href'));
});

有关 jQuery 选择器的更多帮助,请转到此处

于 2009-10-10T03:42:32.853 回答
0

你们肯定在这里帮助了我,非常感谢。我认为我需要的正则表达式/href[\s]?=[\s\"\']\./is就像 ABentSpoon 指出的那样“如果它以斜杠开头,那对于大多数用途来说绝对足够了”。但是我想这将是一个很好的练习,可以阅读其他网站的页面。幸运的是,我可能希望使用的任何页面都位于同一站点和同一服务器上。

要了解 Jeroen 关于仅使用绝对路径的评论,这并不是一个真正的选择,因为该站点上有很多页面。此外,每个页面将获得不同的地址(DNS),具体取决于从内部或外部访问它的位置。如果你给你的链接一个绝对路径,你会将所有链接都与该站点的 DNS 名称联系起来。当您发现这种变化太频繁时会出现问题,或者就此而言,部门认为需要更改其子目录名称,但那是另一回事了。我希望将此功能设计得更灵活一些。

我肯定会阅读有关 jQuery 的信息。看起来很有趣,这不是我玩过的东西......更多的学习即将到来;-)

再次感谢您抽出宝贵的时间。

于 2009-10-10T20:42:35.250 回答
0

为什么不直接使用绝对路径?

于 2009-10-09T23:32:36.453 回答