其實在最前面的某一篇博文里,是絕對提過編碼的,有ASCII,有UTF-8,有GB2312等等,這些我絕對說過的。 url編碼 首先,Http協議中參數的傳輸是"key=value"這種鍵值對形式的,如果要傳多個參數就需要用“&”符號對鍵值對進行分割。如"?key1=value1&key2=value ...
其實在最前面的某一篇博文里,是絕對提過編碼的,有ASCII,有UTF-8,有GB2312等等,這些我絕對說過的。
url編碼
首先,Http協議中參數的傳輸是"key=value"這種鍵值對形式的,如果要傳多個參數就需要用“&”符號對鍵值對進行分割。如"?key1=value1&key2=value2",這樣在服務端在收到這種字元串的時候,會用“&”分割出每一個參數,然後再用“=”來分割出鍵和值併進行處理。
然後,url只能使用 ASCII 字元集來通過網際網路進行發送,也就是說url允許的只能是英文字母、阿拉伯數字和某些標點符號,不能使用其他文字和符號。那麼如果url中有漢字,就必須編碼成為允許的字元後方可使用。
但是有個問題是,標準的國際組織並沒有規定具體的編碼方法,而是交給應用程式(瀏覽器)根據自己的一套編碼方式進行編碼,有點亂,而每個瀏覽器對同樣的字元解碼都是不太一樣的。但這裡只是指網站子文件的字元編碼混亂,比如前面用的百度搜索,編碼還是一樣的:
火狐瀏覽器:
https://www.baidu.com/s?wd=%E8%83%A1%E6%AD%8C&rsv_spt=1&rsv_iqid=0xa88a849a000297f1&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=cn&tn=monline_3_dg&rsv_enter=1&oq=a&inputT=1164&rsv_t=44f3deAD5ZhHUuZS8qctF8DYdHQl0Jc0fIHprlrxVQPAKhGaI7WQzU0%2BDYkOZ7iFCV9H&rsv_pq=bc5bcce5000040e2&rsv_sug3=10&rsv_sug1=9&rsv_sug7=100&bs=a
谷歌瀏覽器:
https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E8%83%A1%E6%AD%8C&oq=%25E8%2583%25A1%25E6%25AD%258C&rsv_pq=bc8022d200026160&rsv_t=cf02s%2BKYldDmROy0mQpW7gMikG0rFAkF5WE0KydGdjM1v4PH9wW87XYxuCA&rqlang=cn&rsv_enter=1&rsv_sug3=1&rsv_sug1=1&rsv_sug7=100&rsv_sug2=0&inputT=12&rsv_sug4=439
IE瀏覽器:
https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=%E8%83%A1%E6%AD%8C&rsv_pq=b3b7634b00004749&rsv_t=fa91EE041mGXpmDfMhWtd6QSrm%2F24pXydfxJc%2BPc5W59OuaHKoicHE4Ngwo&rqlang=cn&rsv_enter=1&rsv_sug3=4
(搜索關鍵詞我已經標註出來)
url的編碼樣式是使用【%】加上代表十六進位為一個位元組形式的兩位字元—【0-9和A-F】來(比如%EC),詳細規則:
- 對於ASCII字元,字母a在ASCII碼中對應的位元組是0x97,那麼Url編碼之後得到的就是%97,字母abc, url編碼後得到的就是%97%98%99
- 對於非ASCII字元,RFC文檔建議使用utf-8對其進行編碼得到相應的位元組,然後對每個位元組執行百分號編碼。如前面搜索的"胡歌"使用UTF-8字元集得到的位元組為0xE8 0x83 0xA1 0xE6 0xAD 0x8C,經過Url編碼之後得到%E8%83%A1%E6%AD%8C
所以url編碼通常也被稱為百分號編碼(percent-encoding)。所以你覺不覺得url編碼確實混亂,一會兒又是ASCII碼,一會兒又是UTF-8碼?
不過平時使用時註意一下就可以,不用太在意