JavaScript中的編碼解碼
1、URI
統一資源標識符(URI)是一個用于標識某一互聯網資源名稱的字符串。,該種標識允許用戶對任何(包括本地和互聯網)的資源通過特定的協議進行交互操作。Web上可用的每種資源 -HTML文檔、圖像、視頻片段、程序等都可由一個通用資源標識符(Uniform Resource Identifier, 簡稱"URI")進行定位。
1.1、URI和URL、URN
URL是統一資源定位符,它是一種具體的URI,即URL可以用來標識一個資源,而且還指明了如何locate這個資源。而URN是統一資源命名,是通過名字來標識資源,比如mailto:java-net@java.sun.com。也就是說,URI是以一種抽象的,高層次概念定義統一資源標識,而URL和URN則是具體的資源標識的方式。URL和URN都是一種URI。
一個URI實例可以代表絕對的,也可以是相對的,只要它符合URI的語法規則。而URL類則不僅符合語義,還包含了定位該資源的信息,因此它不能是相對的。
JavaScript中對字符串進行編碼涉及3個函數:escape、encodeURI、encodeURIComponent,相應3個解碼函數:unescape、decodeURI、decodeURIComponent
2、編碼
2.1、escape() 函數
escape() 函數可對字符串進行編碼,這樣就可以在所有的計算機上讀取該字符串。返回值是已編碼的 string 的副本。其中某些字符被替換成了十六進制的轉義序列。
escape(string)
可以使用 unescape() 對 escape() 編碼的字符串進行解碼。不過ECMAScript v3 反對使用該方法,應用使用 decodeURI() 和 decodeURIComponent() 替代它。
2.2、encodeURI() 函數
encodeURI() 函數可把字符串作為 URI 進行編碼。返回值:已經進行了編碼后的字符串,其中的某些字符將被十六進制的轉義序列進行替換。
encodeURI(uri)
var uri = "mytest.php?name=st?le&car=saab&user=陳真"; let a = encodeURI(uri) // mytest.php?name=st%C3%A5le&car=saab&username=%E9%99%88%E7%9C%9F let b = decodeURI(a) //mytest.php?name=st?le&car=saab&username=陳真
詳情參考:http://www.runoob.com/jsref/jsref-encodeuri.html
2.3、encodeURIComponent() 函數
encodeURIComponent() 函數可把字符串作為 URI 組件進行編碼。返回值:已經進行了編碼后的字符串,其中的某些字符將被十六進制的轉義序列進行替換。
encodeURIComponent(URIstring)
var uri = "mytest.php?name=st?le&car=saab&username=陳真"; let c = encodeURIComponent(uri) //mytest.php%3Fname%3Dst%C3%A5le%26car%3Dsaab%26username%3D%E9%99%88%E7%9C%9F let d = decodeURIComponent(uri) //mytest.php?name=st?le&car=saab&username=陳真
請注意 encodeURIComponent() 函數 與 encodeURI() 函數的區別之處,前者假定它的參數是 URI 的一部分(比如協議、主機名、路徑或查詢字符串)。因此 encodeURIComponent() 函數將轉義用于分隔 URI 各個部分的標點符號。
3、解碼
3.1、unescape() 函數
3.2、decodeURI() 函數
3.3、decodeURIComponent() 函數
4、編碼解碼的作用
當我們使用url的方式提交數據到后臺,例如:ajax提交到后臺的,就需要對url進行encodeURI編碼,尤其是URI中有中文的話,否則,可能會導致后臺出現各種亂碼,不進行編碼的話,默認瀏覽器編碼格式提交,這樣的話,瀏覽器不同,傳到后臺的值也就不同了,所以建議使用encodeURI統一編碼為utf-8的格式到后臺,然后后臺再處理再解碼就行了

浙公網安備 33010602011771號