Javascript decodeURI(Component) malformed uri exception

天涯浪子 提交于 2019-12-03 07:27:48

问题


I entered the following in Chrome's console:

decodeURIComponent('a%AFc');

Instead of resulting to a0xAFc, it caused a URIError exception (malformed uri).

I've heard several excuses why this may be possible, but what I don't understand is why?

The decodeURIComponent() function in particular is supposed to decode data, not verify the URI.

  • Wikipedia: Percent Encoding
  • RFC3986: URI Generic Syntax (2005)

回答1:


%AF is not a character on his own but part of Unicode sequence (MACRON - %C2%AF).

%AF wasn't produced by encodeURIComponent but something like escape, so it can be decoded by unescape.

What you probably need is decodeURIComponent('%C2%AF')




回答2:


This may or may not apply to someone else's situation but this is what did it for me so I thought I would share. I upload and download lots of text files to a custom CMS.
the '%' sign in the source code was wreaking havoc for me.

// 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 '%'


来源:https://stackoverflow.com/questions/9064536/javascript-decodeuricomponent-malformed-uri-exception

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!