【问题标题】:JavaScript: What characters are not encoded by encodeURIComponent?JavaScript:encodeURIComponent 不编码哪些字符?
【发布时间】:2011-09-10 02:48:51
【问题描述】:

我正在用另一种语言编写自己的函数,如果可能的话,我希望它提供相同的结果。

【问题讨论】:

  • 现在显而易见的问题是:为什么不能使用encodeURIComponent 本身?
  • “我正在编写一个函数,它的行为方式与本机函数完全相同” 确实引出了这个问题......
  • @Felix:我写的不是 JavaScript。它适用于 Java 和 Perl。我想要独立的子例程,这样它就可以在不需要任何库的情况下工作。我还想确保它与 JavaScript 等价物相同。
  • 好的,现在明白了 :) 感谢您的澄清。

标签: javascript url encode


【解决方案1】:

您可以在MDC documentation中找到信息:

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

【讨论】:

  • 不正确,冒号:被编码为%3A
  • @inta: 引用说 除了 以下字符。 : 不在例外列表中,所以是的,它被转义了。
  • @FelixKling 是的,您的回答是正确的,我的评论是针对 Guilherme Ferreira,也许我应该更清楚地说明这一点。
【解决方案2】:

简短的回答,您可以匹配所有 UTF-16 代码单元 encodeURIComponent 将使用以下编码:

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

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

长答案,ES 262 说

15.1.3.4 编码URI组件(uriComponent)

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

  1. 让 componentString 为 ToString(uriComponent)。

  2. 让 unscapedURIComponentSet 是一个字符串,其中包含每个有效字符的一个实例 uriUnescaped

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

uriUnescaped 是这样定义的

uriUnescaped ::: uriAlpha |十进制数字 | uriMark

在哪里

uriAlpha ::: 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 ::: - _ 之一。 ! ~ * ' ( )

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

【讨论】:

    猜你喜欢
    • 2011-07-27
    • 2021-11-07
    • 2012-02-23
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 2011-01-07
    相关资源
    最近更新 更多