爲什麼要urlencode()

why

1.。當字符串數據以url的形式傳遞給web服務器時,字符串中是不允許出現空格和特殊字符串的

2.。url對字符有限制,比如把一個郵箱放入url,就需要使用urlencode函數。

3.。url轉義其實也只是爲了符合url的規範而已。因爲在標準的url規範中中文和很多的字符是不允許出現在url中的。

        urlencode的說明:

                urlencode ( string $str ) : string

                此函數便於將字符串編碼並將其用於 URL 的請求部分,同時它還便於將變量傳遞給下一頁。

                參數

                     str 要編碼的字符串

                返回值

                     返回字符串,此字符串中除了-_.之外的所有 非字母數字 字符都被替換成百分號(%)後跟 兩位十六進制數

空格則編碼位加號(+)。此編碼與www表單post數據的編碼方式是一樣的,同時與application/x-www-form-urlencoded的媒體類型編碼方式一樣。由於歷史原因,此編碼在將空格編碼爲加號(+)方面與RFC3986編碼不同。

 

哪些字符是需要轉化的呢?

1.。ASCII的控制字符

        這些字符都是不可打印的,自然需要進行轉化。

2.。一些非ASCII字符

        這些字符自然是非法的字符範圍。轉化也是理所當然的了。

3.。一些保留字符

        很明顯最常見的就是“&”了,如果這個出現在url中,那你認爲是url中的一個字符呢,還是特殊的參數分割符呢?

4.。一些不安全的字符

        例如:空格。爲了防止引起歧義,需要被轉化爲“+”。

 

明白了這些,也就知道了爲什麼需要轉化了,而轉化的規則也是很簡單的。

        按照每個字符對應的字符編碼,不是符合我們範圍的,統統的轉化爲 % 的形式,自然也是16進制的形式。

 

和字符編碼無關

        通過urlencode的轉化規則和目的,我們也很容易的看出,urlencode是基於字符編碼的同樣的一個漢字,不同的編碼類型,肯定對應不同的urlencode的串。gbk編碼有gbk的encode結果。

        apache等服務器,接收到字符串後,可以進行decode,但是還是無法解決編碼的問題。編碼的問題,還是需要靠約定或者字符編碼的判斷解決。

        因此,urlencode只是爲了url中一些非ASCII字符,可以正確無誤的被傳輸,至於使用哪種編碼,就不是urlencode所關心和解決的問題了。

 

 

 

 

        

 

 

 

          

 

                       

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章