URL编码,也称为百分号编码,对于安全地在URL中传输数据至关重要。此过程将标准URL中不允许的字符(例如空格、特殊字符和重音字母)转换为Web服务器可以理解的格式。JavaScript 提供了两个强大的函数,encodeURI()
和 encodeURIComponent()
,可以有效地处理这个问题。理解它们的区别是构建强大且安全的 Web 应用程序的关键。
目录
- URI 和 URL 有什么区别?
- 使用 JavaScript 中的
encodeURI()
方法编码 URL - 使用 JavaScript 中的
encodeURIComponent()
方法编码 URL - 选择正确的编码方法
URI 和 URL 有什么区别?
虽然经常互换使用,但 URI(统一资源标识符)和 URL(统一资源定位符)是不同的。URI 是标识资源的通用术语,而 URL 是一种特定类型的 URI,它通过指定其访问机制(例如 HTTP)来定位资源。可以将 URI 视为地址,将 URL 视为到达该地址的路线。在 JavaScript 编码中,实际区别很小;两者都需要正确的编码来处理特殊字符。
使用 JavaScript 中的 encodeURI()
方法编码 URL
encodeURI()
方法对完整的 URI 或 URL 进行编码。它针对的是 URL 路径、查询参数或片段标识符中不允许的特殊字符,而保留通常被认为安全的字符(如斜杠 /
、问号 ?
和与号 &
)不变。
let url = "https://www.example.com/search?q=hello world";
let encodedUrl = encodeURI(url);
console.log(encodedUrl); // 输出:https://www.example.com/search?q=hello%20world
encodeURI()
将空格替换为 %20
(空格的百分号编码表示)。它适用于对整个 URL 进行编码,但不适用于可能包含保留字符的单个组件。
使用 JavaScript 中的 encodeURIComponent()
方法编码 URL
encodeURIComponent()
更加严格,它会对所有特殊字符进行编码,包括那些通常在 URL 中安全的字符。这使得它非常适合对单个 URL 组件(查询参数或片段标识符)进行编码。使用此方法对整个 URL 进行编码将导致 URL 格式错误。
let urlBase = "https://www.example.com/search?q=";
let query = "hello world & special characters";
let encodedQuery = encodeURIComponent(query);
let completeUrl = urlBase + encodedQuery;
console.log(completeUrl); // 输出:https://www.example.com/search?q=hello%20world%26%20special%20characters
请注意,encodeURIComponent()
如何对所有空格和与号进行编码。这可以防止在动态构建 URL 时出现意外行为和安全漏洞。
选择正确的编码方法
对整个 URL 使用 encodeURI()
,对单个组件(查询参数、片段标识符)使用 encodeURIComponent()
。错误使用这些函数可能会导致 URL 损坏和服务器端错误。始终在服务器端解码 URL 以检索原始数据。