19

AJAXで何かをテストしていたところ、アラートを出すと成功したことがわかりました

alert(decodeURI('%'));

また

alert(encodeURIComponent('%'));

ブラウザは次のコードでエラーになります。

$.ajax({
   type: "POST",
   url: "some.php",
   data: "",
   success: function(html){
         alert(decodeURIComponent('%'));
//           alert(decodeURI('%'));
   }
 });

他の文字列を使用すると、問題なく動作します。
それは私が逃したものですか?

4

8 に答える 8

23

最近、decodeURIComponent私のコードでアンパサンド%につまずき、グーグルでこの質問にたどり着きました。

%Ilia のバージョンよりも短い処理に使用する関数は次のとおりです。

function decodeURIComponentSafe(s) {
    if (!s) {
        return s;
    }
    return decodeURIComponent(s.replace(/%(?![0-9][0-9a-fA-F]+)/g, '%25'));
}

これ

  • 入力が空の場合、入力値を変更せずに返します
  • すべての%NOT の後に 2 桁 (16 進数) の数字が続くものを%25
  • デコードされた文字列を返します

このあたりの他のサンプルでも動作します。

  • decodeURIComponentSafe("%%20Visitors") // % Visitors
  • decodeURIComponentSafe("%Directory%20Name%") // %Directory Name%
  • decodeURIComponentSafe("%") // %
  • decodeURIComponentSafe("%1") // %1
  • decodeURIComponentSafe("%3F") // ?
于 2019-01-22T14:08:43.687 に答える
18

コンソールから試行すると、Chrome がバーフします。URIError: URI の形式が正しくありません。% はエスケープ文字です。単独では使用できません。

于 2011-09-16T19:46:33.300 に答える
3

ここでの問題は、をデコードしようとしていることです%。これは有効なエンコード文字列ではありません。代わりにをエンコードしたいと思います%

decodeURI('%') // URIError
encodeURI('%') // '%25'
于 2011-09-16T20:00:48.607 に答える
1

URL の形式が正しくないため、decodeURI('%')との両方が機能しません (単一の % は url または url コンポーネントとして無効です)。decodeURIcomponent('%')

Uncaught URIError: URI malformed

encodeURIComponent()作品

于 2011-09-16T19:45:05.500 に答える
-7

無限ループまたはロックアップは、jquery のバグが原因である可能性があります。

「ロックアップ」を引き起こしている可能性が高いポイントで、jquery にブレークポイントを設定できます。

%ASCII テーブル内の特定の文字を参照する英数字が続くため、Decode は提供されただけでは意味がありませんpercent-encoding。通常、Opera、Chrome、FF では URIError を生成する必要があります。

encodeURIパーセント文字の「URL エンコード」表記を探している場合は、ブラウザの組み込み関数を使用します。

encodeURI('%')
//>"%25"
于 2011-09-16T19:48:58.017 に答える