表单操作不使用特殊字符(&)

时间:2014-10-08 22:34:15

标签: php html forms action

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

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

  

名=" smsworld〜availbox〜&安培; RAD"

它几乎正常工作,现在唯一的问题是,当我提交表单时,"&"正在被%26切换。

我应该得到的网址是:

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

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

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

您使用的是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/

答案 1 :(得分:1)

您正在观察的是URL编码。 URL中的某些字符是保留字符,这样您就无法创建包含该字符的URL部分,否则URL将被误解。 &符号是其中一个角色。

考虑带有查询字符串的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作为附加查询字符串变量。仅用于每个查询字符串变量的一个表单字段。

答案 2 :(得分:0)

感谢所有回复,但我已经使用几行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();
     

});

我还没有格式化所有字段,但即便如此,非常感谢您的帮助:)