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

來源:互聯網
上載者:User

標籤:encoding   字元編碼   它的   資料   root   理論   orm   react   odi   

在這個頁面裡面試著搜了一下 「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有什麼區別?

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.