邮政标志&到另一个PHP文件

时间:2016-10-07 13:46:13

标签: javascript php

如何发布带有'&'标志的字符串到一个PHP文件。

我有一个jscript:

function saveRow(oTable, nRow) {
    var jqInputs = $('input', nRow);
    oTable.fnUpdate(jqInputs[0].value, nRow, 0, false);
    oTable.fnUpdate(jqInputs[1].value, nRow, 1, false);
    oTable.fnUpdate(jqInputs[2].value, nRow, 2, false);
    oTable.fnUpdate(jqInputs[3].value, nRow, 3, false);
    oTable.fnUpdate('<a class="edit" href="">Edit</a>', nRow, 4, false);
    oTable.fnUpdate('<a class="delete" href="">Delete</a>', nRow, 5, false);
    oTable.fnDraw();
    var val1 = jqInputs[0].value;
    var val2 = jqInputs[1].value;
    var val3 = jqInputs[2].value;
    var val4 = jqInputs[3].value;

    var dataString = 'pairchannels=1' + '&eventname=' + val1 + '&datetime=' + val2 + '&pairedchannel=' + val3 + '&realchannel=' + val4;
    if (val1 == '' || val2 == '' || val3 == '' || val4 == '') {
        alert(jqInputs[1].value);
    } else {
        alert(val1);

        $.ajax({
            type: "POST",
            url: "process.php?",
            data: dataString,
            cache: false,
            success: function(result) {
                alert(dataString);
            }
        });
    }
    return false;
}

将POST发送到process.php:

 ...
 else if(isset($_POST['pairchannels'])){
     $this->procPairChannels();
  }
...

function procPairChannels(){
  global $session, $form;
  /* Account edit attempt */
  $retval = $session->procPairChannels($_POST['eventname'], $_POST['datetime'], $_POST['pairedchannel'], $_POST['realchannel']);   

}

但不是$ _POST ['eventname']中的整个字符串,而是“波斯尼亚和黑塞哥维那”,php将字符串拆分为“&amp;”。这是第一次发生这样的错误,因为我从未有过“&amp;”在我的任何一个字符串中,直到现在。

我该怎么办才能处理这种字符串?

1 个答案:

答案 0 :(得分:0)

您需要正确编码您在数据字符串中发送的值,以便它们不会被解释为URL中的特殊字符(&分隔键值对...):

最简单的方法是让jQuery通过发送对象而不是字符串来处理它:

// Maybe a name change to dataObject...
var dataString = {
  pairchannels: 1,
  eventname: val1,
  // etc.
};

如果您想自己构建查询字符串,则需要对每个值使用encodeURIComponent()