什麼是url encode?
url是一種資源定位符號,用於標識一個資源。url產生之初的一個想法是讓url可以方便得傳遞,所以url的字符被限定ASCII碼的一個集合內,這些被稱爲非限定字符集。
除此之外,還有一些字符具有特定功能,比如query參數需要?來連接url和參數。多個參數需要用&來拼接等等。這些功能性的字符被稱爲保留字符。
關於這些保留字符的含義,參見:https://zh.wikipedia.org/wiki/%E7%BB%9F%E4%B8%80%E8%B5%84%E6%BA%90%E6%A0%87%E5%BF%97%E7%AC%A6
裏面定義了url的規範及各個保留字符的含義。
爲什麼需要encode?
主要有兩個原因:
1.將不在非保留字符集內的字符編碼爲保留字符集內的。比如中文等。中文無法被直接編碼至url中,需要經過encode。大致流程就是將字節流轉換爲對應的16進制串,再在每一個16進制前加一個百分號。
2.如果url內容包含保留字符,則也需要進行encode,比如一個query參數是abc&d,那麼如果直接拼在url中,這個參數會被截斷爲abc。所以,url encode其實是對url中的component進行的而非url的全部。