2010-04-30 56 views
2

所以我工作的站點有通過傳遞一個鍵和值系統,通過查詢字符串操作的過濾系統。URL編碼,安全分隔符

整個網站很快就要經歷一個重新考慮的因素,我在維護現有網站時,在討論實現此目的的正確方法之前,我只需要改變我的分隔符的想法。

目前的格式是這樣的:

cf=<key>:<value>

的問題是,我最近碰到一個問題,因爲我們的一些此過濾器的新的價值觀包含它們當中:。即:cf=MO_AspectRatio:16:10

是url編碼,但瀏覽器去編碼%3A到:上飛,因爲:不打破固有的網址。

我需要的網址安全分隔符是一些建議沒有:-_&?這是有道理的。我不在尋找像()或野生東西的解決方案。

回答

4

管道怎麼樣?

cf=MO_AspectRatio|16:10 
0

最直接的解決方案是base64對整個字符串進行編碼,然後base64對輸入進行解碼。

另一個選擇是在輸出之前urlencode兩次,然後在輸入時對它進行一次url解碼(在php的所有輸入上執行自動urldecode,或者apache不確定是誰執行此操作)。

2

This Wikipedia article有助於瞭解有關無保留字符和保留字符的更多信息。

到目前爲止tilde ~可能是最好的選擇。但是機會遲早會破裂的。或者您應該在用戶輸入中正確記錄並驗證它。

2

URI scheme generic syntax承認兩個有效的參數分隔符:&;。我總是看到前者,而不是後者。需要?符號才能正確識別查詢字符串的開頭,所以我不會推薦使用它。在網址上使用的/也是如此。

任何不屬於此類的字符並不屬於您的值,這是可以接受的。下面是一些可能的列表,通過我自己的喜好,不包括你明確拒絕的那些分類:

,+|#$!

任何人應該做的。另外,即使你特別要求不要:在未來的重構中,嘗試使用真正的URI參數(使用&)。會爲你節省很多頭等。

+0

是的,這是該網站的重新構建計劃,或者可能是重新構建當前的過濾機制。今天我更關心數據變化而不是破壞現有的功能。 謝謝:) – Aren 2010-04-30 23:26:12