2012-01-30 14 views
29

は私がChromeのコンソールで次のように入力:代わりにa0xAFcに結果のJavascriptをdecodeURI(コンポーネント)不正な形式のURI例外

decodeURIComponent('a%AFc'); 

、それはURIError例外(不正な形式のURI)を引き起こしました。

これはなぜ可能性があるのか​​聞いたことがありますが、わからないのはなぜですか?

特に、decodeURIComponent()関数は、データをデコードし、URIを検証しないと想定されています。

答えて

37

%AF彼自身の上の文字が、Unicodeシーケンス(MACRON - %C2%AF)の一部ではありません。

%AFencodeURIComponentで作成されていませんでしたが、escapeのようなものなので、unescapeでデコードできます。あなたはおそらく必要なもの

は、私はエンコードされたテキストの負荷を解読しようとした、失敗したと、それはその特定の文字の上にチョークだろう気づいた後、私はそれを作ったdecodeURIComponent('%C2%AF')

+2

です。おそらく、私は「エスケープ」をする必要があります。 – Christian

+1

@ChristianSciberras 'encodeURIComponent()'は、UTF-8で動作するので、通常はより良い選択です。しかし、 '0xAF'自体は有効なUTF-8エンコード文字列ではありません。これがあなたのコードが機能しない理由です。今はっきりしていることを願っています。 – duri

+3

ASCII/iso-8859-1パーセント符号化入力を処理する必要がある場合はどうすればよいですか? 'unescape'は非難され、' unescapeURI'もありません – felixfbecker

関連する問題