我已经使用AJAX成功更改了网页的内容。我可以在我的域中包含另一个网页,但我遇到的问题是使超链接工作。如果超链接使用相对寻址然后相对于我包含它的页面将无法工作,所以我正在调查php解析html标签,因为我在
中读取它我正在使用以下RegExp /href[\s]?=[\s\"\']+(.*?)[\"\']/im
来查找href数据,但想了解如何为相对地址添加前缀的指针。
我想更换链接 href =“./ test1 / page1.html”
在页面 http:// foo.bar.com/folder1/info1/data.html
用href =“ http:// foo.bar.com/folder1/info1/./test1/page1.html”
如果我包含 /的页面内容 http://foo.bar.com/folder2/faraway/another.html 中的folder1 / info1 / data.html ,嵌入页面上的链接将正常运行
我正在寻找使用php preg_replace函数来做到这一点,但很快就会崩溃。如果我正在咆哮错误的树并且有更合适的工具或方法,请有人指出我正确的方向;-)。也许它可以在Javascript中全部下载?
答案 0 :(得分: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)
答案 1 :(得分:2)
将ABentSpoon的响应更进一步,您的jQuery选择器可以搜索以斜杠开头的所有锚标记。
$('#embedded a[@href^=/]').each(function() {
$(this).attr('href', baseUrl + $(this).attr('href'));
});
有关jQuery选择器的更多帮助,请转到here。
答案 2 :(得分:0)
为什么不使用绝对路径?
答案 3 :(得分:0)
你们当然帮助我,非常感谢。我认为我需要的正则表达式是/href[\s]?=[\s\"\']\./is
,因为ABentSpoon指出“如果它以斜线开头,那对于大多数用途来说绝对足够”。但是,我想从其他网站启用阅读页面将是一个很好的例外。幸运的是,我可能希望使用的任何页面都在同一个站点上,并且位于同一台服务器上。
要了解仅使用绝对路径的Jeroen评论,这不是一个真正的选项,因为此网站上有很多页面。此外,每个页面的处理方式也不同(DNS),具体取决于从内部或外部访问的位置。如果您为链接指定了绝对路径,则将所有链接绑定到具有该站点DNS名称。当你发现这种情况经常发生变化时会出现问题,或者对于这种情况,有些问题需要更改其子目录名称,但这是另一个故事。我希望将此功能设计得更灵活一些。
我一定会读到关于jQuery的内容。看起来很有趣,这不是我玩过的东西......更多的学习即将到来; - )
再次感谢你抽出时间。