title: encodeURI()和encodeURIComponent()的區(qū)別
date: 2018-10-21 21:50:29
tags: [JavaScript]
categories: JavaScript
區(qū)別
encodeURI()和encodeURIComponent()方法都可以對URI(通用資源標識符)進行編碼回俐,以便發(fā)送給瀏覽器萨驶。
但它們編碼的范圍有所不用极谊。
- encodeURI()方法不會對下列字符編碼:ASCII字母、數(shù)字地粪、~!@#$&*()=:/,;?+'
- encodeURIComponent()方法不會對下列字符編碼:ASCII字母家制、數(shù)字、~!*()'
使用場景
- 對 整個URL 進行編碼就使用encodeURI()
- 對 URL中的參數(shù) 或者 URL后面的一部分 進行編碼就使用encodeURIComponent()
舉例說明:
對一個URL進行編碼
encodeURI("http://x.com/你好?a=1")
// 正確
假設(shè)我想在google中查詢上面這個網(wǎng)址
encodeURI("http://google.com/search?q=http://x.com/你好?a=1")
// 正確
上面這樣寫沒什么問題,但是如果把查詢的網(wǎng)址更改成這樣再encodeURI
encodeURI("http://google.com/search?q=http://x.com/你好?a=1&b=2")
// 錯誤拐云,查詢參數(shù)被&分隔了,有歧義
因為&沒有被編碼近她,這部分就不能作為一個整體的查詢參數(shù)叉瘩,而是被分隔成了http://x.com/%E4%BD%A0%E5%A5%BD?a=1
和&b=2
兩部分,所以要用encodeURIComponent對&進行編碼
encodeURIComponent("http://google.com/search?q=http://x.com/你好?a=1&b=2")
// 正確