我有一些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 ;
}
});
当有双重空间通过这种方式时,有人可以帮助解释吗?我们很可能会得到双倍空格,因为这是用户的自由格式文本输入,并且他们正在输入笔记以供其他人阅读。
谢谢, Ĵ
答案 0 :(得分:2)
根据https://en.wikipedia.org/wiki/Percent-encoding,
通用URI语法要求在URI中提供字符数据表示的新URI方案实际上必须表示来自未保留集的字符而不进行转换,并且应该根据UTF-8将所有其他字符转换为字节,然后对这些值进行百分比编码。
由于您没有使用空格" "
,而是使用了不间断空格" "
(\u00a0
),因此将其编码为两个字节%c2%a0
是很自然的。
问题在于,在接收端,它不能正确解码为两个空格,而是作为其他一些奇怪的字符。
烨。修复解码。