URL及編碼相關

最近在使用compass進行高級搜索的時候有許多參數,在url上會暴露參數,爲了隱藏URL的具體參數的含義(這個需要有個強大的正則表達規則來解析URL,即對url進行rewrite,在我之前的文章裏有過介紹。 開發的時候,還是URL?PARAM=XX的形式。),同時爲了讓複雜的URL看上去好看點, 方便SEO,對URL進行了編碼處理,用BASE64編碼跟效率沒有關係, URL也不會變短, BASE64編碼好處是字符編碼範圍有限度。
另外,URL實際上大小寫,在EMAIL中發送,都存在各種問題,完全使用ASCII也可以避免漢字編碼問題。如果你的URL放在郵件裏,很多MAIL SERVER會修改的你的URL,比如修改你的大小寫,修改你的編碼。那麼這個時候,用戶會非常的討厭。一些特殊的字符可能導致, MAIL SERVER在安全處理上, 把URL硬生生的拆散了。
另外,爲了保持和不同的HTTP SERVER兼容, 不讓HTTP SERVER按編碼規則修改你的URL。使用ASCII是最好的選擇。


[quote]http://domain/中文.html?q=中文.

1.第一個中文爲pathinfo
2.第二個是queryString

這個url在get請求,也就是說直接拷貝到瀏覽器上敲回車執行的時候動作如下:
瀏覽器會對這個url中的分ascii字符集進行url encode.
中文ie:pathinfo 會用utf-8字符集進行url encode.queryString 會用gbk
中文firefox:pathinfo 會用gbk字符集進行url encode.queryString 會用gbk:

http://search1.taobao.com/browse/0/n-0-----------------g,m5sw2ytmmvza----------------40--commend-0-all-0.htm?at_topsearch=1

n-0-----------------g,m5sw2ytmmvza----------------40--commend-0-all-0.htm
這段是pathinfo.也就是單單中文ie,和中文firefox 進行url encode時,採用的字符集都不一致.一種是utf-8,一種是gbk.那麼傳到後臺程序如何decode呢?


怎麼做?做法就是程序把pathinfo用一定的方式轉換成ascii碼,這樣瀏覽器就不自己來做了.做法有很多.下面舉兩種:

一種,使用urlEncode(stirng,編碼格式).因爲這個編碼格式是自己制定的.所以後臺知道如何decode.
一種:base64.甚至是base32.其實道理都是一樣的.把pathinfo用程序轉換成ascii碼.不讓瀏覽器自己瞎轉. [/quote]

[quote]
然而,標準的Base64並不適合直接放在URL裏傳輸,因爲URL編碼器會把標準Base64中的“/”和“+”字符變爲形如“%XX”的形式,而這些“%”號在存入數據庫時還需要再進行轉換,因爲ANSI SQL中已將“%”號用作通配符。
  爲解決此問題,可採用一種用於URL的改進Base64編碼,它不在末尾填充'='號,並將標準Base64中的“+”和“/”分別改成了“*”和“-”,這樣就免去了在URL編解碼和數據庫存儲時所要作的轉換,避免了編碼信息長度在此過程中的增加,並統一了數據庫、表單等處對象標識符的格式。
[/quote]



參考:
[url]http://www.iteye.com/topic/286810[/url]
[url]http://www.iteye.com/topic/286240[/url]
[url]http://dogstar.iteye.com/blog/227056[/url]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章