encodeURI vs encodeURIComponent,簡單解說 URI 編碼

Free stock photo of algorithm, ascii code, binary

作為一名網頁前端開發人員,encodeURIencodeURIComponent 都是 JavaScript 中用於編碼 URI (統一資源標識符) 的函數。它們對於確保某些字符能夠正確地格式化,以便能夠通過網路傳輸至關重要。

然而,這兩者之間有一些關鍵的區別:

特點encodeURIencodeURIComponent
應用對象完整的URI單一的URI組件(如查詢字串、路徑段)
轉義範圍只轉義構成有效 URI 所需的字符轉義在 URI 中有特殊意義的所有字符
特殊字符:, /, ?, &, #
使用場合當需要編碼整個URI時當需要編碼 URI 的個別組件時
encodeURI vs encodeURIComponent

encodeURI

  • 這個函數用於編碼一個完整的 URI。
  • 它會轉義構成有效 URI 所必需的字符。
  • 它不會轉義對 URI 有特殊意義的字符,比如 :/?&#
  encodeURI("https://www.example.com/my page?name=John Doe");
  // 輸出: "https://www.example.com/my%20page?name=John%20Doe"

encodeURIComponent

  • 這個函數用於編碼單個 URI 組件,例如查詢字串或路徑段。
  • 它會轉義在 URI 中具有特殊意義的所有字符。
  encodeURIComponent("name=John Doe&age=30");
  // 輸出: "name%3DJohn%20Doe%26age%3D30"

該使用哪一個

  • 當你需要編碼一個完整的 URI 時,使用 encodeURI
  • 當你需要編碼一個 URI 組件(如查詢字串、路徑段或查詢字串中的值)時,使用 encodeURIComponent

以下是一個用於說明區別的範例:

var name = "John Doe";
var age = 30;
var url = "https://www.example.com/search";

// 使用 encodeURI
var completeUrl = encodeURI(url + "?name=" + name + "&age=" + age);
// 輸出: "https://www.example.com/search?name=John%20Doe&age=30"

// 使用 encodeURIComponent
var completeUrl = url + "?name=" + encodeURIComponent(name) + "&age=" + encodeURIComponent(age);
// 輸出: "https://www.example.com/search?name=John%20Doe&age=30"

在這個範例中,encodeURIencodeURIComponent 都可以是合適的,具體取決於上下文。然而,對於可能包含如 &=?:/ 這些在 URI 中具有特殊意義的字符的各個組件來說,使用 encodeURIComponent 通常更為安全。

相關參考來源

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *