当你要逃避而不是使用 encodeURIComponent/encodeURI /?

在网页开发中,经常需要对 URL 进行处理,最常见的是使用 encodeURIComponentencodeURI 方法。然而,在某些极端情况下,这些方法可能会带来一些问题。本文将讨论这些问题,并提供替代方案。

为什么会出现问题?

首先我们需要知道,URL 中只能包含 ASCII 码字符集中的可打印字符和一些特殊字符,如 /?=& 等。如果 URL 中出现了其他字符,浏览器或服务器就无法正确解析该 URL。

对于非 ASCII 码字符,encodeURIComponent 方法会将其转义成 %xx 的形式,其中 xx 表示该字符的十六进制编码。例如,中文字符 "你" 的编码是 0xE4 0xBD 0xA0encodeURIComponent("你") 的结果就是 "%E4%BD%A0"。类似地,encodeURI 方法只会转义一些特殊字符,如空格、/?#& 等。

但是,在某些情况下,我们可能需要传递特殊字符,例如 +#。此时,使用 encodeURIComponentencodeURI 就会出现问题。

替代方案:escape

在 JavaScript 中,还有一个方法叫做 escape,它可以将任意字符转义成 ASCII 码字符集中的可打印字符。例如,escape("你好") 的结果是 "%u4F60%u597D"。

虽然 escape 方法已经被废弃了,但在某些情况下仍然有用。例如,在编写 WebSocket 的客户端代码时,需要将消息字符串转义后发送。此时,使用 escape 方法比使用 encodeURIComponent 更加方便。

示例代码

下面是一个示例,展示了使用 encodeURIComponentescape 方法进行 URL 编码的区别。

----- --- - -------------------------------

----- ------- - -------------------

--------------- - ----------------------------- -- ------------------------------------------------

--------------- - ----------------- -- ------------------------------------------------

总结

在大多数情况下,应该优先使用 encodeURIComponentencodeURI 方法进行 URL 编码。但是,在特殊情况下,这些方法可能会出现问题,此时可以考虑使用 escape 方法。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/7276