我正在用一种不同的语言编写自己的函数,如果可能的话,希望它能提供相同的结果。
我正在用一种不同的语言编写自己的函数,如果可能的话,希望它能提供相同的结果。
encodeURIComponent
对以下字符进行编码:
字母、数字、- _ . ! ~ * ' ( )
:
被编码为 %3A
。 - inta:
不在例外列表中,因此是的,它会被转义。 - Felix Kling简而言之,您可以匹配所有UTF-16码元encodeURIComponent
会使用以下编码:
/[^a-zA-Z0-9\-_.!~*'()]/g
虽然规范表示它可以处理采用4字节UTF-8编码的补充代码点。
长篇回答,ES 262 规定如下
15.1.3.4 encodeURIComponent(uriComponent)
encodeURIComponent 函数计算出一个新的 URI 版本,在该版本中,将某些字符的每个实例替换为一个、两个、三个或四个转义序列,这些序列代表字符的 UTF-8 编码。 当使用一个参数 uriComponent 调用 encodeURIComponent 函数时,执行以下步骤:
让 componentString 成为 ToString(uriComponent)。
让 unescapedURIComponentSet 成为包含在 uriUnescaped 中每个字符有效的字符串。
返回调用 Encode(componentString,unescapedURIComponentSet)的结果
而 uriUnescaped 的定义如下
uriUnescaped ::: uriAlpha | DecimalDigit | 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 中的任意一个
encodeURIComponent
呢? - Felix Kling