JavaScript:哪些字符不由encodeURIComponent 编码?

发布于 2024-11-13 22:33:56 字数 40 浏览 3 评论 0原文

我正在用不同的语言编写自己的函数,并且希望它尽可能提供相同的结果。

I'm writing my own function in a different language, and I want it to provide identical results if possible.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

甜是你 2024-11-20 22:33:56

您可以在 MDC 文档中找到信息:

encodeURIComponent 对除以下字符之外的所有字符进行转义:
字母、十进制数字、 - _ 。 ! ~ * ' ( )

You can find information in the MDC documentation:

encodeURIComponent escapes all characters except the following:
alphabetic, decimal digits, - _ . ! ~ * ' ( )

只等公子 2024-11-20 22:33:56

简而言之,您可以匹配所有 UTF-16 代码单元 encodeURIComponent 使用以下内容进行编码:

/[^a-zA-Z0-9\-_.!~*'()]/g

不过,规范表示它使用 4 字节 UTF-8 编码处理补充代码点。

长答案,ES 262 说

15.1.3.4 编码URIComponent(uriComponent)

encodeURIComponent 函数计算 URI 的新版本,其中某些字符的每个实例都替换为表示该字符的 UTF-8 编码的一个、两个、三个或四个转义序列。
当使用一个参数 uriComponent 调用encodeURIComponent 函数时,将执行以下步骤:

  1. 让 componentString 为 ToString(uriComponent)。

  2. 令 unescapedURIComponentSet 为一个字符串,其中包含每个有效字符的一个实例
    uri未转义

  3. 返回调用Encode(componentString, unescapedURIComponentSet)的结果

uriUnescaped 是这样定义的

uriUnescaped ::: uriAlpha | uriUnescaped ::: uriAlpha |十进制数字 | uri标记

在哪里

uriAlpha ::: abcdefghijklmnopqrstu vwxyz ABCDEFGHIJKLMNOPQRSTU VWXY Z 之一

uriMark ::: - _ 之一。 ! ~ * ' ( )

DecimalDigit ::: 0 1 2 3 4 5 6 7 8 9 之一

Short answer, you can match all UTF-16 code units encodeURIComponent would encode using the below:

/[^a-zA-Z0-9\-_.!~*'()]/g

though, the spec says that it handles supplemental code points with 4 byte UTF-8 encodings.

Long answer, ES 262 says

15.1.3.4 encodeURIComponent (uriComponent)

The encodeURIComponent function computes a new version of a URI in which each instance of certain characters is replaced by one, two, three, or four escape sequences representing the UTF-8 encoding of the character.
When the encodeURIComponent function is called with one argument uriComponent, the following steps are taken:

  1. Let componentString be ToString(uriComponent).

  2. Let unescapedURIComponentSet be a String containing one instance of each character valid in
    uriUnescaped.

  3. Return the result of calling Encode(componentString, unescapedURIComponentSet)

And uriUnescaped is defined thus

uriUnescaped ::: uriAlpha | DecimalDigit | uriMark

where

uriAlpha ::: one of a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

uriMark ::: one of - _ . ! ~ * ' ( )

DecimalDigit ::: one of 0 1 2 3 4 5 6 7 8 9

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文