多个空格的奇怪Javascript URL编码结果

时间:2014-01-07 23:52:43

标签: javascript url-encoding

我有一些javascript从HTML字段读取用户输入(使用.text())。然后,我通过URL(FMP协议,而不是HTTP,但执行相同的编码)发送该文本。

当我进入多个空格(彼此相邻)时,我得到一个看似奇怪的URL编码结果。所以,这里有一些结果编码的例子(一个有一个空格,一个有两个空格):

 Bob Bob    =>  Bob%20Bob
 Bob  Bob   =>  Bob%20%c2%a0Bob

%C2是一个带有符号的'A',而%A0似乎是一个空白?

问题在于,在接收端它没有正确解码为两个空格,而是作为一些其他奇怪的字符。这是一些示例代码:

$('.newEntry').on('blur', function() {       
     var text = encodeURIComponent ( $('.newEntry').text() ) ;

      if ( currentComment != text ) {  
          window.location = 'fmp://blar.com/Sol?script=AddComment&$commentID=new&$commentText=' + text ;
     }         
 });

当有双重空间通过这种方式时,有人可以帮助解释吗?我们很可能会得到双倍空格,因为这是用户的自由格式文本输入,并且他们正在输入笔记以供其他人阅读。

谢谢, Ĵ

1 个答案:

答案 0 :(得分:2)

根据https://en.wikipedia.org/wiki/Percent-encoding

  

通用URI语法要求在URI中提供字符数据表示的新URI方案实际上必须表示来自未保留集的字符而不进行转换,并且应该根据UTF-8将所有其他字符转换为字节,然后对这些值进行百分比编码。

由于您没有使用空格" ",而是使用了不间断空格" "\u00a0),因此将其编码为两个字节%c2%a0是很自然的。

  

问题在于,在接收端,它不能正确解码为两个空格,而是作为其他一些奇怪的字符。

烨。修复解码。