如何从javascript中的url解码html表单值?

时间:2016-10-14 03:28:32

标签: javascript html

在我的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函数?我不想硬编码字符串替换。

有谁知道处理这个的方法?

由于

3 个答案:

答案 0 :(得分:0)

您可以使用Jquery插件。 Here

或者查看此Here

答案 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, ' ');