urlencode编码基本概念_URLencode编码简析
urlEncode:
<1>·定義:百分號編碼(英語:Percent-encoding), 也稱作URL編碼(英語:URL encoding), 是特定上下文的統一資源定位符 (URL)的編碼機制. 實際上也適用于統一資源標志符(URI)的編碼。也用于 為"application/x-www-form-urlencoded" MIME準備數據, 因為它用于通過HTTP的請求操作(request)提交HTML表單數據。
<2>·URL含義:URL是為了 統一的命名網絡中的一個資源(URL不是單單為了HTTP協議而定義的,而是網絡上的所有的協議都可以使用)。所以這就要求URL有一些基本的特性:
1、URL是可移植的。(所有的網絡協議都可以使用URL)
2、URL的完整性。(不能丟失數據,比如URL中包含二進制數據時,如何處理)
3、URL的可閱讀性。(希望人能閱讀)
<3>·使用urlENcode原因:
1、當字符串數據以url的形式傳遞給web服務器時,字符串中是不允許出現空格和特殊字符的
2、因為 url 對字符有限制,比如把一個郵箱放入 url,就需要使用 urlencode 函數,因為 url 中不能包含 @ 字符。
3、url轉義其實也只是為了符合url的規范而已。因為在標準的url規范中中文和很多的字符是不允許出現在url中的。(主要就是消除服務器解析url時的奇異)
4、實例:
我們都知道Http協議中參數的傳輸是"key=value"這種簡直對形式的,如果要傳多個參數就需要用“&”符號對鍵值對進行分割。如"?name1=value1&name2=value2",這樣在服務端在收到這種字符串的時候,會用“&”分割出每一個參數,然后再用“=”來分割出參數值。針對“name1=value1&name2=value2”我們來說一下客戶端到服務端的概念上解析過程:
上述字符串在計算機中用ASCII嗎表示為: 6E616D6531 3D 76616C756531 26 6E616D6532 3D 76616C756532。 服務端在接收到該數據后就可以遍歷該字節流,首先一個字節一個字節的吃,當吃到3D這字節后,服務端就知道前面吃得字節表示一個key,再想后吃,如果遇到26,說明從剛才吃的3D到26子節之間的是上一個key的value,以此類推就可以解析出客戶端傳過來的參數。現在有這樣一個問題,如果我的參數值中就包含=或&這種特殊字符的時候該怎么辦。比如說“name1=value1”,其中value1的值是“va&lu=e1”字符串,那么實際在傳輸過程中就會變成這樣“name1=va&lu=e1”。我們的本意是就只有一個鍵值對,但是服務端會解析成兩個鍵值對,這樣就產生了奇異。如何解決上述問題帶來的歧義呢?解決的辦法就是對參數進行URL編碼URL編碼只是簡單的在特殊字符的各個字節前加上%,例如,我們對上述會產生奇異的字符進行URL編碼后結果:“name1=va%26lu%3D”,這樣服務端會把緊跟在“%”后的字節當成普通的字節,就是不會把它當成各個參數或鍵值對的分隔符。
<4>·編碼原理:
將需要轉碼的字符轉為16進制,然后從右到左,取4位(不足4位直接處理),每2位做一位,前面加上%,編碼成%XY格式。
比如:
空格ASCII碼是32,對應16進制是20,那么urlencode編碼結果是:%20,但在新標準中空格對應的是+
比如:
中 ASCII碼是-10544,對應的16進制是FFFFFFFFFFFFD6D0,那么urlencode編碼結果是:%D6%D0
部分特殊字符編碼:
空格 ! # $ % + @ : = ?
%20 %21 %23 %24 %25 %2B %40 %3A %3D %3F
總結
以上是生活随笔為你收集整理的urlencode编码基本概念_URLencode编码简析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大数据入门介绍和学习路线
- 下一篇: 什么是脚本,脚本语言?