web-dev-qa-db-ja.com

Javascript decodeURI(Component)不正な形式のURI例外

Chromeのコンソールに次のように入力しました。

_decodeURIComponent('a%AFc');
_

_a0xAFc_になる代わりに、URIError例外(不正な形式のuri)が発生しました。

なぜこれが可能になるのか、いくつかの言い訳を聞いたことがありますが、理解できないのはwhy

特にdecodeURIComponent()関数は、URIを検証するのではなく、データをデコードすることになっています。

35
Christian

_%AF_は彼自身の文字ではなく、Unicodeシーケンスの一部です( _MACRON - %C2%AF_ )。

_%AF_はencodeURIComponentではなく、escapeのようなものであるため、unescapeでデコードできます。

おそらく必要なのはdecodeURIComponent('%C2%AF')です

41
Juicy Scripter

これは他の人の状況に当てはまるかもしれないし当てはまらないかもしれませんが、これは私のためにそれをしたので、私は共有すると思いました。大量のテキストファイルをカスタム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 '%'
1
MD Nelles