golang之UrlEncode編碼/UrlDecode解碼


為什么需要編碼和解碼

1.是因為當字符串數據以url的形式傳遞給web服務器時,字符串中是不允許出現空格和特殊字符的;
2.因為 url 對字符有限制,比如把一個郵箱放入 url,就需要使用 urlencode 函數,因為 url 中不能包含 @ 字符;
3.url轉義其實也只是為了符合url的規范而已。因為在標准的url規范中中文和很多的字符是不允許出現在url中的。

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

1. ASCII 的控制字符

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

2. 一些非ASCII字符

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

3. 一些保留字符

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

4. 就是一些不安全的字符了。

例如:空格。為了防止引起歧義,需要被轉化為“+”。
明白了這些,也就知道了為什么需要轉化了,而轉化的規則也是很簡單的。

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

5.和字符編碼無關

通過urlencode的轉化規則和目的,我們也很容易的看出,urleocode是基於字符編碼的。同樣的一個漢字,不同的編碼類型,肯定對應不同的urleocode的串。gbk編碼的有gbk的encode結果。
apache等服務器,接受到字符串后,可以進行decode,但是還是無法解決編碼的問題。編碼問題,還是需要靠約定或者字符編碼的判斷解決。
因此,urleocode只是為了url中一些非ascii字符,可以正確無誤的被傳輸,至於使用哪種編碼,就不是encode所關心和解決的問題了。
編碼問題,不是urlencode所要解決的。

golang之UrlEncode編碼/UrlDecode解碼

package main

import(
    "fmt"
    "net/url"
)

func main()  {
    var urlStr string = "傻了吧:%:%@163& .html.html"
    escapeUrl := url.QueryEscape(urlStr)
    fmt.Println("編碼:",escapeUrl)

    enEscapeUrl, _ := url.QueryUnescape(escapeUrl)
    fmt.Println("解碼:",enEscapeUrl)
}

輸出

編碼: %E5%82%BB%E4%BA%86%E5%90%A7%3A%25%3A%25%40163%26+.html.html
解碼: 傻了吧:%:%@163& .html.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM