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

Javascript 清理location.pathname以加载文件并选择具有href属性的元素,javascript,php,jquery,html,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”这样我就可

我有一个脚本,基本上我正在使用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.php
url.com////projects///index.php
,我希望对其输出
/projects/index.php
,以便再次正确选择文件

有没有一个标准的方法可以做到这一点?我想避免使用一些正则表达式或字符串替换方法,因为我不确定它是否能够处理所有情况,尽管如果正确的方法是这样做,那么我将继续并实现它。浏览器使用解析器来确定要加载的文件,所以如果有一个解决方案可以使用我试着搜索jquery url解析器或清理程序,但实际上我不确定应该搜索什么术语,所以我的搜索结果很差

编辑:作为一些背景,我基本上实现了这一点:,但我需要一种方法来调整它,以便它也可以在子目录中找到文件

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

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
功能也会因奇怪的输入而失败。

用一个正斜杠替换多个正斜杠,然后在必要时删除域名。例如:

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

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

为什么用户要输入所有这些额外的斜杠?@Barmar用户很可能不会,但如果他/她这样做了,我仍然希望我的网站能够正常运行。我只需将www.domain.com///index.php放在浏览器中,它就可以正常工作,无需重写。我怀疑Web服务器会处理它,所以您不需要这样做。为什么ajax调用会有所不同?如果这是用户想要的,你就不能请求
“/////index.php”
。@David我在问题中添加了更多信息。是的,我想这可能是我必须走的路线。但是我不明白,如果浏览器能够解析url并找到文件,那么javascript为什么不能做同样的事情呢?