Chromeのコンソールに次のように入力しました。
decodeURIComponent('a%AFc');
結果として生じる代わりにa0xAFc
、URIError例外(不正な形式のURI)が発生しました。
なぜこれが可能かもしれないという言い訳をいくつか聞いたことがありますが、私が理解していないのはなぜですか?
特にこのdecodeURIComponent()
関数は、URIを検証するのではなく、データをデコードすることになっています。
Chromeのコンソールに次のように入力しました。
decodeURIComponent('a%AFc');
結果として生じる代わりにa0xAFc
、URIError例外(不正な形式のURI)が発生しました。
なぜこれが可能かもしれないという言い訳をいくつか聞いたことがありますが、私が理解していないのはなぜですか?
特にこのdecodeURIComponent()
関数は、URIを検証するのではなく、データをデコードすることになっています。
%AF
はそれ自体の文字ではなく、Unicodeシーケンス(MACRON - %C2%AF
)の一部です。
%AF
によって生成されたのではなく、のencodeURIComponent
ようなものescape
であるため、によってデコードできますunescape
。
おそらく必要なのはdecodeURIComponent('%C2%AF')
これは他の人の状況に当てはまるかもしれないし、当てはまらないかもしれませんが、これが私にとってそれをしたので、私は共有したいと思いました。たくさんのテキストファイルをカスタム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 '%'