2013-10-15 18 views
0

我有一個腳本,基本上我試圖找到使用javascript/jquery(與location.pathname).php文件的位置。所以,我的問題基本上是,如果用戶輸入一些奇怪的名字:清理location.pathname加載文件並選擇具有href屬性的元素

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/,但我需要一種方法來調整它,所以它可以在子目錄的文件。

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

爲什麼用戶在輸入所有這些額外的斜線? – Barmar

+0

@Barmar最有可能的用戶不會,但在他/她確實我還是希望我的網站正確執行 – Justin

+0

我只是把www.domain.com/////index.php在我的瀏覽器的情況下,它沒有改寫就工作。我懷疑網絡服務器處理它,所以你不需要。 – Barmar

回答

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的回報。

+0

是的,我想這可能是我必須去的路線。我不明白,如果瀏覽器能夠解析url並找到文件,那爲什麼javascript不能做同樣的事情? – Justin

相關問題