表单操作无法使用特殊字符(&;)


Form action not working with special characters (&)

我有一个预订表单,表单操作应该是:https://reservations.posthotel.com/smsworld/wc.dll?smsworld~可用框~但它不起作用。当我提交表格时,从?只是被忽略。

作为解决方案,我将第一个字段命名为

name="smsworld~availbox~&RAD"

它几乎有效,现在唯一的问题是,当我提交表格时,"&"被%26切换。

我应该得到的URL是:

https://reservations.posthotel.com/smsworld/wc.dll?smsworld~availbox~&RAD=10%2F15%2F2014&RDD=10%2F21%2F2014&夜=3&RCA=2

但相反,我得到了:https://reservations.posthotel.com/smsworld/wc.dll?smsworld~availbox~%26RAD=10%2F15%2F2014&RDD=10%2F21%2F2014&夜=6&RCA=2

有什么建议吗?

您使用的是GET还是POST(表单上的方法属性)?如果是GET,则操作中的URL不能包含查询字符串参数。请尝试使用POST。

我刚为你做了一把小提琴,有两种形式。一个使用GET(不起作用),另一个使用POST(似乎起作用):

<form action="https://reservations.posthotel.com/smsworld/wc.dll?smsworld~availbox~" method="get">
    <input type="submit" value="Submit GET" />
</form>

<form action="https://reservations.posthotel.com/smsworld/wc.dll?smsworld~availbox~" method="post">
    <input type="submit" value="Submit POST" />
</form>

http://jsfiddle.net/n80e6Lzv/

您观察到的是URL编码。URL中的某些字符是保留字符,因此您无法制作包含该字符的URL部分,否则URL将被误解。Ampersand就是其中一个角色。

考虑一下带有查询字符串的URL是什么样子的:

http://test.com?name1=value1&name2=value2

正如您可能已经知道的那样,查询字符串变量由一个与号分隔。URL编码用一组字符代替一个保留字符,以防止对URL的误解。

换句话说,你想要的网址是不可能的。您的GET数据将被解释为:

$_GET = array(
     'smsworld~availbox~' => '',
     'RAD' => '10/15/2014',  //An additional index created by the unencoded ampersand
     //etc...
);

如果额外的RAD索引是您的实际意图,那么通过这种方式是不可能的。您应该使用隐藏字段来添加RAD作为额外的查询字符串变量。每个查询字符串变量只能有一个表单字段。

感谢您的回复,但我已经使用几行javascript找到了解决方案。

$('.submit btn').on('click',function(e){

  var checkinDate = $('#checkAvailDate').val(),
      guests = parseInt($'#checkAvailAdults').val()) + parseInt($('#checkAvailChildren').val());
  var formAction = 'https://reservations.posthotel.com/smsworld/wc.dll?smsworld~availbox~&RAD=10%2F15%2F2014&nights=6&RCA=' + guests;
  var win = window.open(formAction, '_blank');
  win.focus();
  e.preventDefault();

});

我还没有完成所有字段的格式化,但即使这样,也非常感谢您的帮助:)