2016-10-14 91 views
0

在我的HTML頁面,我有沒有編碼類型的表單標籤(GET),因此它會使用如何在javascript中解碼來自url的html表單值?

application/x-www-form-urlencoded默認情況下根據此:

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

但隨後編碼空格變成+標誌。例如,當我通過

a b c & f,它把它變成

a+b+c+%26+f在URL中。然後,如果我做的JavaScript decodeURIComponent函數我得到

a+b+c+&+f,但是如果我想要原始字符串a b c & f什麼JavaScript函數我打電話?我不喜歡硬編碼字符串替換。

有沒有人知道如何處理?

感謝

+0

可能是有用的。 http://stackoverflow.com/a/8649003 –

+0

簡短的回答如何處理這個問題是首先用空格替換+號,然後解碼其餘的數據。但你實際需要的是一個查詢字符串解析器。 –

回答

-1

你可以嘗試從decodeURIComponent

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

我想這是一種方式,你的意思是'str.replace(「+」,「」)',但這真的是最佳實踐方式嗎? – omega

+0

是的,這是可以接受的方式 –

+0

只會替代第一個實例 – charlietfl

0

那裏得到的字符串後,在JavaScript中使用替換功能是jQuery的撐着,你可以使用。 Here

或可考慮此Here

0

更新:這是我寫的這一個時間HTML超值的文章:http://www.htmlgoodies.com/beyond/javascript/article.php/11877_3755006_2

在簡單ptq看看(語法分析的查詢)功能,功能的圖書館之一,我在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 */ 

q的屬性將對應於經由GET請求的查詢字符串提交給當前的URL的HTML表單值定義的任何name=value雙。例如,如果一個HTML表單包含一個名爲name且內容爲「Joseph」的字段,並且該表單是按其action屬性指定的方式提交給HTML頁面file.html,那麼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, ' ')); 
} 

請注意,在這個新版本中,所有表單字段都以數組形式返回。這更合適,因爲標準允許具有相同名稱的多個表單字段,這意味着表單字段值的正確數據類型是一個字符串數組。

相關問題