2012-03-16 34 views
1

我在寫一個JavaScript web應用程序。我希望允許用戶通過正則表達式搜索目錄,並將他們的搜索詞寫入URL以便他們可以爲結果添加書籤。爲正則表達式創建可收藏的URL?

例如,以產生狀態的可收藏的搜索與名字起「A」和結束「一」:

/states/^A.*a$ 

人們應該能夠書籤的網址,並得到結果匹配阿拉斯加,亞利桑那州和阿拉巴馬。

但是,我發現URL安全字符和正則表達式字符在一起播放不好。例如,當我向URL寫入^時,瀏覽器將其重寫爲%5E

任何人都可以建議一個更好的方式來創建一個正則表達式的書籤URL?我不需要支持每種可能的正則表達式字符:只需ASCII加$,*,?,^|

理想情況下,我想避免使用GET參數(如/states?init=A&final=a),但也許這就是我需要去的一個漫長而笨重的URL。

回答

1

如果您確實在URL中使用正則表達式搜索「持久化」,那麼我只需簡單地對搜索字符串進行URL編碼/ URL解碼並完成它。

您可以顯式地URl-對搜索字符串進行編碼,然後在發出請求時對其進行明確解碼。

也就是說,我強烈建議您將搜索字符串設置爲URL 查詢參數而不是URL本身的一部分。特別是在你的情況下,它是一個搜索,你是最好有查詢字符串,以及查詢字符串,而不是URL。它可以幫助之類的搜索引擎優化,REST的合規性,可維護性URL等

最後,還有其他方式允許用戶書籤搜索也是如此。如果您爲每個搜索提供一個ID,並將該實際查詢存儲在數據庫中以獲取該特定書籤ID,則可以爲用戶提供諸如/states/search/bookmark/12345/這樣的好網址,這些網址乾淨,用戶友好,易於書籤,可共享以及最重要的是,如果你需要,你可以在幕後與他們做些事情。當您需要升級您的搜索,或者想要添加更多功率等時,這非常棒。

+0

謝謝!我不想URL編碼/解碼,因爲它看起來很醜。我想也許querystring路線是要走的路 - 它看起來像querystrings中的字符不會被編碼。 – Richard 2012-03-16 18:09:03

+0

@Richard - 我會_still_編碼查詢字符串,因爲不同的瀏覽器可能會有不同的行爲。如果URL清潔是目標,抽象實際查詢(就像我在最後提到的那樣)是最好的路線,因爲它提供了最乾淨的URL和服務器端的最大靈活性。 – cdeszaq 2012-03-16 18:11:04

+0

我也喜歡可讀和可破解的URL,所以我想避免抽象查詢,如果可能的話......也許這是一個沒有真正好的解決方案的問題。 – Richard 2012-03-22 09:58:20