中文urlencode後,每個%XX代表一個位元組,是這樣的吧?
所以urlencode('中')的結果是%XX%XX%XX(utf-8編碼)
中文urlencode後,每個%XX代表一個位元組,是這樣的吧?
所以urlencode('中')的結果是%XX%XX%XX(utf-8編碼)
對的,為了解決unicode的過度佔用記憶體空間和擴展不變的問題,utf-8規範出現了。
對於單字節的符號,位元組的第一位設為0,後面7位元為這個符號的unicode碼。因此對於英語字母,UTF-8編碼和ASCII碼是相同的。
對於n位元組的符號(n>1),第一個位元組的前n位元都設為1,第n+1位元設為0,後面位元組的前兩位一律設為10。剩下的沒有提及的二進位位,全部都是這個符號的unicode碼。
也就是說utf-8的編碼結果是變長的。 中
字的utf-8編碼為E4B8AD
,所以對應的urlencode為%E4%B8%AD
.
是的,URL編碼純粹是把特殊符號和非ASCII字元的資料用十六進位表示出來,然後每個位元組(也就是兩位十六進制數)前加一個百分號。對於那些不特殊的ASCII字元的URL編碼就是它本身。
同樣一個中字,如果是GBK編碼就是兩個字節,如果是UTF-8就是三個位元組。
當然,比較麻煩的是URL編碼比較混亂。例如有的地方用+
來表示空格,有的又是用%20
,具體情況還是要具體分析。前者對應的是函數是urlencode
,後者對應的是rawurlencode
。通常前者用在表單資料中(包括URL中的query也就是?
後的部分),後者用在URL路徑中(host後query前的部分)