清理location.pathname以加载文件并选择具有href属性的元素

时间:2013-10-15 18:36:19

标签: javascript php jquery html

我有一个脚本,其中我正在尝试使用javascript / jquery(带location.pathname)查找.php文件的位置。所以,我的问题基本上是如果用户输入一些奇怪的东西:

url.com/url.com////url.com////index.php////url.com////index.php.////,那么我需要一种处理方法,以便我可以获得/index.php所以我可以选择从中加载文件并加载一些内容(使用ajax),以及选择具有href = "/index.php"的元素,这样我就可以将其作为活动链接。

还存在类似这样的问题:

url.com/projects/index.phpurl.com////projects//index.php我想要输出/projects/index.php以再次正确选择文件。

有没有一种标准的方法可以做到这一点?我想避免使用一些正则表达式或字符串替换方法,因为我不确定它是否能够处理所有情况,尽管如果正确的方法是这样做,那么我将继续执行它。浏览器使用解析器来确定要加载的文件,因此如果有一个解决方案使用类似的东西(可能内置或其他东西)那么这将是很好的。我尝试搜索jquery url解析器或清理但我实际上不确定我应该寻找的术语是什么,所以我的搜索时间很短。

编辑:正如一些背景,我基本上实现了这个:http://css-tricks.com/rethinking-dynamic-page-replacing-content/,但我需要一种方法来调整它,以便它也可以在子目录中找到文件。< / p>

EDIT2:以下是我的意思的一个例子:

enter image description here

EDIT3:这是我正在使用的ajax调用,它在popstate上触发:

var file = location.pathname;
$("#content").load(file + " #content", function() {
    $("#menu ul a").removeClass("current");
    $("#menu ul a[href="+file+"]").addClass("current");
});

当我为奇怪的浏览器条目执行此操作时,加载和href显然失败,因为我的网站中href属性设置为href = "/index.php"。即使可以加载页面,load函数也会因奇怪的输入而失败。

1 个答案:

答案 0 :(得分:0)

使用单个正斜杠替换多个正斜杠,然后根据需要删除域名。例如:

$(document).ready(function() {
    var userStr = 'url.com////projects//index.php';
    userStr = userStr.replace(/\/{2,}/g, '/').replace(/url.com/, '');
    // userStr = /projects/index.php
});

这显然不适用于您的用户可能提供的每个URL组合,但我怀疑您会找到一个处理所有可能性的正则表达式。如果用户向您发送“url.com////index.php.////”,则给予他们404作为回报。