HTML GET表单传递+符号为%2B

时间:2016-09-01 16:47:42

标签: html forms encoding

我正在编写一个表单来发送一个GET请求,其中包含用户在表单中选择的参数。在这些字段之一中,用户必须选择具有+符号的值的包。这是一个形式:

<form name="creahost" method="get" enctype="application/x-www-form-urlencoded" action="*********.php">

<input type="radio" name="setupName" value="Mail+1GB+15boxes" checked> Mail 1GB | 15 boxes</input><br>

当按下提交按钮并将GET请求发送到服务器时,URL如下所示:http://**********.php?[...]&setupName=Mail%2B1GB%2B15boxes&[...]

如何告诉浏览器它正在撰写的网址必须是+而不是%2B?

谢谢!

1 个答案:

答案 0 :(得分:0)

%28是您在网址中表示加号的方式。文字+将被解码为空格。

听起来你真正的问题是你的服务器端代码没有正确处理URL并且无法解码百分比编码字符。你应该在那里解决问题。

如果您真的想强制使用此客户端(这是一个糟糕的主意),那么您必须在JavaScript中重建整个表单处理过程。

YourForm.addEventListener("submit", submit_with_improper_plus_encoding);

function submit_with_improper_plus_encoding(event) {
    event.preventDefault();
    var form = this;
    var query = "";
    for (var i = 0; i < elements.length; i++) {
         var el = elements[i];
         if (el.disabled) {
             continue;
         }
         if (el.name == "") {
             continue;
         }
         if ((el.type == "checkbox" || el.type == "radio") && !el.checked) {
             continue;
         }
         query += encodeURIComponent(el.name) + "=" + encodeURIComponent(el.value) + "&";
    }
    query = query.replace(/%2B/g, "+")
    location = "*********.php?"+ query;
}

以上内容并未考虑正确包含点击提交按钮的数据。