這五個函式都是 JavaScript 中用於處理 URI 的函式,但它們的目標和處理範圍不同:
1. escape()
和 unescape()
:
escape()
: 對字串進行編碼,將非 ASCII 字元轉換為%xx
或%uxxxx
格式。已廢棄,不推薦使用,因為它不能正確處理非 ASCII 字元,特別是 Unicode 字元。它主要用於對 ASCII 字串進行編碼,例如將空格轉換為%20
。unescape()
: 對escape()
編碼的字串進行解碼。同樣已廢棄。
2. encodeURI()
和 decodeURI()
:
encodeURI()
: 用於編碼整個 URI。它會將 URI 中的特殊字元(例如空格、#、? 等)轉換為%xx
格式,但不會編碼 URI 的保留字元,例如: / ? ; = + & @ #
等。目的是對整個 URI 進行編碼,以便在瀏覽器位址列或連結中使用。decodeURI()
: 對encodeURI()
編碼的 URI 進行解碼。
3. encodeURIComponent()
和 decodeURIComponent()
:
encodeURIComponent()
: 用於編碼 URI 的組成部分,例如查詢引數。它會將所有非字母數字字元(除了- _ . ! ~ * ' ( )
)轉換為%xx
格式,包括保留字元。目的是對 URI 的各個部分進行編碼,以便安全地將其作為查詢引數或其他 URI 元件使用。decodeURIComponent()
: 對encodeURIComponent()
編碼的 URI 元件進行解碼。
總結與對比:
特性 | escape() |
encodeURI() |
encodeURIComponent() |
---|---|---|---|
目的 | 編碼字串(已廢棄) | 編碼整個 URI | 編碼 URI 元件 |
編碼範圍 | 非 ASCII 字元 | URI 中的特殊字元,不包括保留字元 | 所有非字母數字字元,包括保留字元 |
保留字元 | 不處理 | 不編碼 | 編碼 |
示例 | escape("你好 世界") -> %u4F60%u597D%20%u4E16%u753B (已廢棄) |
encodeURI("https://www.example.com/你好 世界") -> https://www.example.com/%E4%BD%A0%E5%A5%BD%20%E4%B8%96%E7%95%8C |
encodeURIComponent("你好 世界") -> %E4%BD%A0%E5%A5%BD%20%E4%B8%96%E7%95%8C |
推薦使用 | ❌ | ✅ 用於編碼整個 URI | ✅ 用於編碼 URI 元件 |
實際應用場景:
- 如果你需要編碼整個 URI,例如在
<a>
標籤的href
屬性中使用,應該使用encodeURI()
。 - 如果你需要編碼 URI 的一部分,例如查詢引數,應該使用
encodeURIComponent()
。
強烈建議避免使用escape()
和unescape()
,它們已經過時並且存在編碼問題。 使用 encodeURI()
和 encodeURIComponent()
可以更好地處理 Unicode 字元,並提供更可靠的 URI 編碼和解碼功能。