URL編碼及解碼


為什么要對URL進行編碼?

      一般來說,網頁URL只能使用英文、數字、還有一些特定的字符。根據網絡標准RFC 1738做了硬性規定:

只有字母和數字[0-9a-zA-Z]、一些特殊符號"$-_.+!*'(),"[不包括雙引號]、以及某些保留字,才可以不經過編碼直接用於URL。

      所以若URL中包括中文等字符,就必須經過編碼后使用,否則傳給服務器的request URL就會包含亂碼,服務器無法正確識別。

      因為RFC 1738沒有規定具體的編碼方法,而是交給應用程序(瀏覽器)自己決定,所以導致“URL編碼”領域非常混亂。想要了解瀏覽器多種情況下的編碼處理,可以參考阮一峰大神的關於URL編碼

URL的編碼與解碼方法

      不同的操作系統、不同的瀏覽器、不同的網頁字符集,將導致完全不同的編碼結果,為了保證客戶端只用一種編碼方法向服務器發出請求,可以使用Javascript先對URL編碼,然后再向服務器提交,不要給瀏覽器插手的機會。

      編碼方法有三種:

      escape(url)、encodeURL(url)、encodeURLComponent(url) (url為需要編碼的URL)

方法 規則 特點

escape(編碼)

unescape(解碼)

除了ASCII字母、數字、標點符號"@ * _ + - . /"以外,對其他所有字符進行編碼 現在已經不提倡使用這種方法了,它不能直接運用與URL編碼,它的真正作用是返回一個字符的Unicode編碼值

encodeURI(編碼)

decodeURI(解碼)

除了常見的符號以外,對其他一些在網址中有特殊含義的符號"; / ? : @ & = + $ , #",也不進行編碼 encodeURI()是Javascript中真正用來對URL編碼的函數,它着眼於對整個URL進行編碼

encodeURIComponent(編碼)

decodeURIComponent解碼)

在encodeURI()中不被編碼的符號"; / ? : @ & = + $ , #",在encodeURIComponent()中統統會被編碼 與encodeURI()的區別是,它用於對URL的組成部分進行個別編碼,而不用於對整個URL進行編碼

      舉個栗子:

      用后兩種常用編碼方法對該URL:http://www.w3school.com.cn/my first:class/ 進行編碼: 

  • encodeURI: encodeURI('http://www.w3school.com.cn/my first:class/') -> http://www.w3school.com.cn/my%20first:class/
  • encodeURIComponent: encodeURIComponent('http://www.w3school.com.cn/my first:class/') -> http%3A%2F%2Fwww.w3school.com.cn%2Fmy%20first%3Aclass%2F

 


免責聲明!

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



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