在我的html页面中,我有一个没有编码类型的表单标记(GET
),因此它将使用
application/x-www-form-urlencoded
根据:
http://www.w3schools.com/tags/att_form_enctype.asp
然后它将空格编码为+
个符号。例如,当我通过
a b c & f
,将其变为
a+b+c+%26+f
。然后,如果我执行javascript decodeURIComponent
函数,我会得到
a+b+c+&+f
,但如果我想要原始字符串a b c & f
,我会调用哪些javascript函数?我不想硬编码字符串替换。
有谁知道处理这个的方法?
由于
答案 0 :(得分:0)
答案 1 :(得分:0)
更新:这里是我为HTML Goodies编写的一篇文章: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请求的查询字符串提交给当前网址的HTML表单值中定义的任何name=value
对。
例如,如果HTML表单包含名为name
的字段,其内容为&#34; Joseph&#34;如果此表单按其action
属性的指定提交到HTML页面file.html
,则GET请求将为&#34; file.html?name = Joseph&#34;并且q.name
的值将等于字符串文字"Joseph"
。
如果以后的JavaScript功能可用,代码的某些部分(如escape
/ unescape
)会有更新和首选的等效部分。
挖掘此代码的后续版本,您还可以在您的网址中使用布尔参数,例如&#34; file.html?name = Joseph&amp; secure&#34;,尽管这些参数在提交时永远不会由浏览器生成一个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, ' '));
}
请注意,在此新版本中,所有表单字段都将作为数组返回。这更合适,因为标准允许多个具有相同名称的表单字段,这意味着表单字段值的数据类型是正确的字符串数组。
答案 2 :(得分:-1)
从decodeURIComponent
获取字符串后,您可以尝试在javascript中使用replace函数str.replace("+", " ");
or
str.replace(/\+/g, ' ');