1. 程式人生 > >【轉】escape,encodeURI,encodeURIComponent有什麽區別?

【轉】escape,encodeURI,encodeURIComponent有什麽區別?

區別 編碼方式 知乎 erl user code data- orm w3c

在這個頁面裏面試著搜了一下 「UTF-8」 ,居然沒有搜到。

escape 和 encodeURI 都屬於 Percent-encoding,基本功能都是把 URI 非法字符轉化成合法字符,轉化後形式類似「%*」。它們的根本區別在於,
escape 在處理 0xff 之外字符的時候,是直接使用字符的 unicode 在前面加上一個 「%u」,而encodeURI則是先進行 UTF-8,再在 UTF-8 的每個字節碼前加上一個 「%」;
在處理 0xff 以內字符時,編碼方式是一樣的(都是「%XX」,XX為字符的 16 進制 unicode,同時也是字符的 UTF-8),只是範圍(即哪些字符編碼哪些字符不編碼)不一樣。(楊易提醒)
encodeURI 是W3C 的標準,而 Escape 是非標準。

舉一個例子:
知乎的「知」字,可以知道它的 unicode 為 0x77e5,對它進行 UTF-8 編碼,變成了三個字節:0xe7, 0x9f, 0xa5
因此,如果是使用 escape 編碼「知」,得到的結果就是 「%u77E5」;encodeURI 得到的結果則是 「%E7%9F%A5」

Escape 的編碼有一個弊端在於,它後面是 4 位 16 進制,故不支持基本多文種平面(BMP)外的字符(unicode 大於 0xffff)的字符;
而 encodeURI 是基於 UTF-8 的,編碼本身理論上可以支持 0x10ffff 內的字符(實際上現在的 JavaScript 不支持 BMP 外的字符,所以 encodeURI 也不支持 )。

使用場景方面,也可以可以參考他的答案,但是不同意這一句:
如果只是編碼字符串,不和URL有半毛錢關系,那麽用escape。

encodeURI(Component) 一般用在 URI 上,但是不是一定就要用在 URL 上。比如如果 POST 請求的 Request Header 中 Content-Type 為「application/x-www-form-urlencoded」, 那麽 Request Payload 裏面的數據一般就是使用 encodeURI(Component) 編碼的。(和 URL 的 querystring 一樣)。

如果沒有必要,不要使用 escape。

from:https://www.zhihu.com/question/21861899

【轉】escape,encodeURI,encodeURIComponent有什麽區別?