更新:這是我寫的這一個時間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, ' '));
}
請注意,在這個新版本中,所有表單字段都以數組形式返回。這更合適,因爲標準允許具有相同名稱的多個表單字段,這意味着表單字段值的正確數據類型是一個字符串數組。
可能是有用的。 http://stackoverflow.com/a/8649003 –
簡短的回答如何處理這個問題是首先用空格替換+號,然後解碼其餘的數據。但你實際需要的是一個查詢字符串解析器。 –