2016-10-14 12 views
0

は、私はエンコードの種類を持っていないフォームタグ(GET)を持っているので、これに応じて、デフォルトでjavascriptのURLからHTMLフォームの値をデコードするには?私のHTMLページに

application/x-www-form-urlencodedを使用することになります。

http://www.w3schools.com/tags/att_form_enctype.asp

しかし、それはエンコードスペースは+になります。たとえば、ときに私は

a b c & fを渡し、それがURLに

a+b+c+%26+fに変換します。その後、私はdecodeURIComponent関数を取得する場合

a+b+c+&+fしかし、私は元の文字列をしたい場合はどのようなJavaScript関数を呼び出すのですかa b c & f?私は、文字列の置き換えをハードコードしたくない。

これを処理する方法を知っている人はいますか?

おかげ

+0

これは役に立つかもしれません。 http://stackoverflow.com/a/8649003 –

+0

これを処理する簡単な答えは、+記号を最初にスペースで置き換えてから、残りのデータをデコードすることです。しかし、実際にはクエリ文字列パーサーが必要です。 –

答えて

-1

あなたはは、decodeURIComponent

str.replace("+", " "); 
or 
str.replace(/\+/g, ' '); 
+0

私はこれが方法だと思ったので、 'str.replace(" + "、" ")'を意味しますが、これは本当にベストプラクティスの方法ですか? – omega

+0

はい、それを行うには受け入れられる方法です –

+0

は、最初のインスタンスを図のように置き換えます。 – charlietfl

0

から文字列を取得した後、使用することができますjqueryのPlugginがあり、JavaScriptで機能を置き換える使用しようとすることができます。 Here

またはこのHere

0

アップデートに見て:ここで私はそれについてHTMLグッズのための1時間に書いた記事です:シンプルptq(パース--クエリを)機能を見てみましょうhttp://www.htmlgoodies.com/beyond/javascript/article.php/11877_3755006_2

は、関数のライブラリの一つは、私はそれが簡単です使用して2001年

function ptq(s, q) { 
    var i, p; 
    s = s.replace(/\+/g, ' ').replace(/;/g, '&').split('&'); 
    q = q || {}; 
    for (i=0; i<s.length; i++) { 
    p = s[i].split('=', 2); 
    q[unescape(p[0])] = unescape(p[1]); 
    } 
    return q; 
    } 

それも非常に古いJavaScriptのバージョンで動作し、中に書いた:

var q = ptq(location.search.substring(1)); 
    /* grab query string after the initial "?" delimiter */ 

プロパティは、GETリクエストのクエリ文字列を介して電流URLに提出したHTMLフォームの値で定義された任意のname=valueペアに対応します。

例えば、HTMLフォームが内容「ジョセフ」とし、HTMLページfile.htmlにそのaction属性で指定され、このフォームが送信されたならば、GET要求はfile.html」になりますnameという名前のフィールドが含まれている場合?名前= Joseph "となり、q.nameの値は文字列リテラル"Joseph"と等しくなります。

escape/unescapeのようなコードの一部は、JavaScriptの後の機能が利用できる場合、より新しい同等のものがあります。

このコードの後のリビジョンを掘り下げて、URLで "file.html?name = Joseph & secure"のようなブール値パラメータを使用することもできます。ただし、HTMLフォームを送信するときにブラウザによって生成されることはありません。また使いやすいです。コードにq = param();と書いてください。これはLincoln D. SteinのCGI.pmモジュールの構文と似ています。

function ptq(q) 
{ 
    /* parse the query */ 
    /* semicolons are nonstandard but we accept them */ 
    var x = q.replace(/;/g, '&').split('&'), i, name, t; 
    /* q changes from string version of query to object */ 
    for (q={}, i=0; i<x.length; i++) 
    { 
    t = x[i].split('=', 2); 
    name = unescape(t[0]); 
    if (!q[name]) 
     q[name] = []; 
    if (t.length > 1) 
    { 
     q[name][q[name].length] = unescape(t[1]); 
    } 
    /* next two lines are nonstandard */ 
    else 
    { 
     q[name][q[name].length] = true; 
    } 
    } 
    return q; 
} 

function param() 
{ 
    return ptq(location.search.substring(1).replace(/\+/g, ' ')); 
} 

この新しいリビジョンでは、すべてのフォームフィールドが配列として返されることに注意してください。標準では同じ名前の複数のフォームフィールドが使用できるため、フォームフィールドの値のデータ型が正しい場合は文字列の配列なので、これははるかに適切です。

関連する問題