JavaScript URLデコード関数


157

最高のJavaScript URLデコードユーティリティとは何ですか?エンコーディングもいいでしょう。jQueryでうまく機能することは、追加のボーナスです。


36
確認encodeURIComponentしましたdecodeURIComponentか?
ガンボ

それは本当に同じことですか?
に。

@Gumbo:URLエンコードおよびURLデコードと同じ-blooberry.com/indexdot/html/topics/urlencoding.htm
at。

回答:


219

私が使ってきたencodeURIComponentで()は、decodeURIComponent()を過ぎます。


1
みんなありがとう!正しい答えのように見えますが、ガンボは最初にこれに答えました。私は彼が信用に値するような気がします
で。

16
これは不完全な答えです。@anshumanによる以下のurlDecode()実装を参照してください。
Steven Francolla

3
いいですが、「+」記号は削除されませんでした。@anshumanの回答は私にとって最も効果的でした
MusikAnimal 2013年

2
++++で表されるスペースでは機能しません
mmm

237

以下は完全な関数です(PHPJSから取得)。

function urldecode(str) {
   return decodeURIComponent((str+'').replace(/\+/g, '%20'));
}

34
+1は:これは本当urldecodeで、スペースのハンドル場合は+、おかげでたくさんのように符号化されている
Máthéエンドレ-Botond

1
これは、データがPHPのurlencode()関数でエンコードされたときに使用する必要があったものです。
スコットケックウォーレン

1
私が間違っていなければ、これはスペースではなく%20として+をデコードすることになります-これは本当にここで望んでいたことではありませんか?エンコードされた文字の別のバージョンではなく、スペースが必要です...いいえ?
Chris Moschini 2013年

8
@ChrisMoschini:いいえ。これは、デコード呼び出しの前に置換が行われるためです。
lfaraone 2013年

1
どうもありがとうございます!!これは、以前にphpでurlencodeされたjqueryの文字列を処理するのに最適な方法です。
Dante Cullari 2013年

9

これを使って

unescape(str);

私は優れたJSプログラマーではないので、すべて試しましたが、これはすごくうまくいきました!


2
クールな答えですが、非ASCII文字のサポートが不十分なために廃止されたようdecodeURIComponent()です。
ブラッドコッホ

9
decodeURIComponent(mystring);

次のコードを使用して、渡されたパラメーターを取得できます。

//parse URL to get values: var i = getUrlVars()["i"];
function getUrlVars() {
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for (var i = 0; i < hashes.length; i++) {
        hash = hashes[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1];
    }
    return vars;
}

または、パラメータを取得する次のワンライナー:

location.search.split("your_parameter=")[1]

2
window.location.search代わりに使用する必要があります。
aloisdgがcodidact.comに移動2016年

3
//How decodeURIComponent Works

function proURIDecoder(val)
{
  val=val.replace(/\+/g, '%20');
  var str=val.split("%");
  var cval=str[0];
  for (var i=1;i<str.length;i++)
  {
    cval+=String.fromCharCode(parseInt(str[i].substring(0,2),16))+str[i].substring(2);
  }

  return cval;
}

document.write(proURIDecoder(window.location.href));

ありがとう、これは私のために働いた。decodeURIComponentが機能しませんでした(不正なURIシーケンス)。
Smile4ever 2016

2

urlencodeを使用してPHPでデータをエンコードする責任がある場合、PHPのrawurlencodeは、+文字を置き換える必要なく、JavaScriptのdecodeURIComponentで動作します。


0

これが私が使ったものです:

JavaScriptの場合:

var url = "http://www.mynewsfeed.com/articles/index.php?id=17";
var encoded_url = encodeURIComponent(url);

var decoded_url = decodeURIComponent(encoded_url);

PHPの場合:

$url = "http://www.mynewsfeed.com/articles/index.php?id=17";
$encoded_url = url_encode(url);

$decoded_url = url_decode($encoded_url);

こちらからオンラインで試すこともできます:http : //www.mynewsfeed.x10.mx/articles/index.php?id=17



0

decodeURIComponent()大丈夫ですが、encodeURIComponent()直接使用したくないです。これは、のような予約文字をエスケープするために失敗した*!'(、と)。詳細については、これが定義されているRFC3986を確認してください。Mozilla Developer Networkのドキュメントには、優れた説明と解決策の両方が記載されています。説明...

RFC 3986(!、 '、(、)、および*を予約する)を厳守するために、これらの文字に正式なURI区切りの使用法がない場合でも、以下を安全に使用できます。

解決...

function fixedEncodeURIComponent(str) {
  return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
    return '%' + c.charCodeAt(0).toString(16);
  });
}

わからない場合は、JSBin.comで優れた実用的なデモをご覧ください。これを、直接使用encodeURIComponent()するJSBin.comの不良で動作するデモと比較してください。

良いコード結果:

thing%2athing%20thing%21

不正なコードの結果encodeURIComponent()

thing*thing%20thing!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.