44

我在 Chrome 的控制台中输入了以下内容:

decodeURIComponent('a%AFc');

它没有导致 to a0xAFc,而是导致了 URIError 异常(格式错误的 uri)。

我听过几个借口为什么这可能是可能的,但我不明白为什么

特别是该decodeURIComponent()功能应该解码数据,而不是验证 URI。

4

2 回答 2

51

%AF不是他自己的字符,而是 Unicode 序列 ( MACRON - %C2%AF) 的一部分。

%AF不是由 产生的,encodeURIComponent而是类似的东西escape,所以它可以被解码unescape

你可能需要的是decodeURIComponent('%C2%AF')

于 2012-01-30T13:40:54.813 回答
7

这可能适用于也可能不适用于其他人的情况,但这就是为我所做的,所以我想我会分享。我将大量文本文件上传和下载到自定义 CMS。源代码中
的 “%”符号对我造成了严重破坏。

// send to server
content = content.toString().replace(/%/g,'~~pct~~');       // ~~pct~~ <-made up replacement
content = encodeURI(content);

// get back from server / database
content = decodeURI(content);
content = content.toString().replace(/~~pct~~/g,'%');    // globally restore '%'
于 2019-03-29T14:50:33.267 回答