引言
在本文中,您將瞭解如何在Golang中對查詢字符串或路徑段進行URL編碼。URL編碼,也稱為百分比編碼,將包含
不可打印、保留或非ascii字符的字符串轉換為可以在internet上傳輸的普遍接受的格式。URL編碼的數據也稱為
application/x-www-form-urlencoded MIME格式。
編碼
Go的net/url包內有一個名為QueryEscape的內置方法來轉義/編碼一個字符串,這樣它就可以安全地放在URL查詢中。下面的示例演示如何在Golang -中對查詢字符串進行編碼。
<code>package
mainimport
("fmt"
"net/url"
)func
main
()
{ query :="Hellö Wörld@Golang"
fmt.Println(url.QueryEscape(query)) }/<code>
輸出內容:
<code>Hell%C3%B6+W%C3%B6rld%40Golang/<code>
對多個查詢參數的編碼
如果希望同時對多個查詢參數進行編碼,則可以創建 url.Values 由查詢參數到值的映射組成,並使用url.Values.Encode()方法對所有查詢參數進行編碼。
下面是一個例子:
<code>package
mainimport
("fmt"
"net/url"
)func
main
()
{ params := url.Values{} params.Add("name"
,"@Rajeev"
) params.Add("phone"
,"+919999999999"
) fmt.Println(params.Encode()) }/<code>
輸出內容:
<code>name
=%40
Rajeev&phone=%2
B919999999999/<code>
對URL路徑編碼
與QueryEscape一樣,Go中的net/url包也有另一個名為PathEscape()的函數,用於對字符串進行編碼,以便將其安全地放置在URL的路徑段中。
舉個栗子:
<code>package
mainimport
("fmt"
"net/url"
)func
main
()
{ path :="path with?reserved+characters"
fmt.Println(url.PathEscape(path)) }/<code>
輸出內容:
<code>path
%20
with%3
Freserved+characters/<code>
通過編碼各個部分來構建完整的URL
最後,讓我們看一個完整的例子,在Golang中進行URL解析和編碼。
<code>package
mainimport
("fmt"
"net/url"
)func
main
()
{ baseUrl, err := url.Parse("http://www.mywebsite.com"
)if
err !=nil
{ fmt.Println("Malformed URL: "
, err.Error())return
} baseUrl.Path +="path with?reserved characters"
params := url.Values{} params.Add("q"
,"Hello World"
) params.Add("u"
,"@rajeev"
) baseUrl.RawQuery = params.Encode() fmt.Printf("Encoded URL is %q\n"
, baseUrl.String()) }/<code>
輸出內容:
<code>Encoded URL is"http://www.mywebsite.com/path%20with%3Freserved%20characters?q=Hello+World&u=%40rajeev"
/<code>
寫在最後
從部分到整體,構建起來整個功能,這是拆解的用法。到更復雜的場景下用起來吧。
Happy coding :)