【问题标题】:Why is the character "+" not sent to php file on ajax request?为什么字符“+”不发送到 ajax 请求的 php 文件?
【发布时间】:2014-07-14 18:33:11
【问题描述】:

在 Firefox 和 Chrome 中,我的 php ($_GET) 正在接收数字和字母以及特殊字符(例如“-”和“(”),但字符 + 除外。这是我的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() 时,用户在点击按钮前首先填写一个 input type="text"。如上所述,在 Firefox 和 Chrome 中,我的 php 文件(AJAX_file.php;非常简化的代码版本如下)正在接收数字和字母以及特殊字符(例如“-”、“(”和“)”)但你明白了要点)并成功回应:

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

?>

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

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

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

【问题讨论】:

    标签: javascript php ajax special-characters


    【解决方案1】:

    你不能发送“+”你需要编码你的参数 尝试将您的代码更改为:

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

    【讨论】:

      【解决方案2】:

      + 是 URL 中的保留字符。如果你想发送它,你必须将它转义为%2B

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

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

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

      【讨论】:

      • 是的……就是这样。谢谢你。我刚刚完成了我的第一个完整的基于 php 的站点的构建(总共超过 20000 行代码)并且从来不需要做 encodeURIComponent (这个问题是针对我的新站点的)。我总是通过 JS 屏蔽不相关的特殊字符,但需要这个新站点的特殊字符。
      猜你喜欢
      • 1970-01-01
      • 2020-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-25
      • 2015-09-22
      • 2020-01-07
      相关资源
      最近更新 更多