为什么在ajax请求中没有将字符“+”发送到php文件?

时间:2014-05-26 03:48:09

标签: javascript php ajax special-characters

在Firefox和Chrome中,我的php($ _GET)正在接收数字和字母以及特殊字符(例如" - "和#34;("),例外是+字符。这是我的ajax请求:

function ajaxFunction(param) {
var ajaxRequest;
try {
    ajaxRequest = new XMLHttpRequest();
} catch (e1) {
    try {
        ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e2) {
        try {
            ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e3) {
            alert("Something is wrong here. Please try again!");
            return false;
        }
    }
}
ajaxRequest.onreadystatechange = function () {
    if (ajaxRequest.readyState === 4) document.getElementById("myDiv").innerHTML = ajaxRequest.responseText;
};

ajaxRequest.open("GET", "AJAX_file.php?param=" + param, true);
ajaxRequest.send(null);
}

当用户点击按钮调用ajaxFunction()时,用户首先填写输入类型=" text"在单击按钮之前。如上所述,在Firefox和Chrome中,数字和字母以及特殊字符(例如" - ","("和")")正在接收我的php文件(AJAX_file.php;非常简洁的代码版本,但你得到了要点)并成功回应:

<?php include 'connect.php';
//Lots of code
echo $_GET['param'];

?>

但是,如果用户输入字符+(n次,其中n> = 1),则没有回显输出。请注意Firebug会看到附加的用户输入(此处显示为&#34; ++&#34;):

GET http://www.mywebsite.com/AJAX_file.php?param=++ 200 OK 278ms

我的php错误日志没有显示通知,警告和错误。谁能告诉我这里我做错了什么?我正在使用网络托管服务......也许这可能是他们的过滤器之一?

2 个答案:

答案 0 :(得分:6)

+是网址中的保留字符。如果要发送它,则必须将其作为%2B转义。

查看list of reserved characters you must escape。您注意到()-不在其中,但+是。

不要自己编码/转义。在每种语言和框架中都有一种处理方法。在JavaScript中,使用encodeURIComponent()

ajaxRequest.open("GET", "AJAX_file.php?param=" + encodeURIComponent(param), true);

答案 1 :(得分:0)

您无法发送“+”,您需要对参数进行编码 尝试将您的代码更改为:

ajaxRequest.open("GET", "AJAX_file.php?param=" + encodeURIComponent(param), true);
ajaxRequest.send(null);