44

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

decodeURIComponent('a%AFc');

結果として生じる代わりに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 に答える