JavaScript:encodeURIComponent没有编码哪些字符?

时间:2011-06-07 14:01:39

标签: javascript url encode

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

2 个答案:

答案 0 :(得分:8)

您可以在MDC documentation

中找到相关信息
  

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

答案 1 :(得分:4)

简短回答,您可以匹配所有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函数时,将执行以下步骤:

     
      
  1. 让componentString为ToString(uriComponent)。

  2.   
  3. 让unescapedURIComponentSet成为一个String,其中包含每个有效字符的一个实例   的 uriUnescaped

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

  6.   

因此定义了uriUnescaped

  

uriUnescaped ::: uriAlpha | DecimalDigit | uriMark

,其中

  

uriAlpha :::其中一个是一个问题,而是一个问题,这是一个问题,而且是一个问题,这是一个问题。      

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

     

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