为什么PHP解码url'+'字符为空格?

时间:2015-10-21 21:43:54

标签: javascript php jquery

这是我的javascript jquery ajax函数发送数据。在这里,我用url附加我的数据,将其发送到服务器。

 url = "/login/auth/";
        $.ajax({
            dataType: "json",
            url: url+encodeURIComponent("a+b+2"),
            success: function (data, textStatus, jqXHR) {
                if (data.login === false)
                {
                    alert("Invalid Password");
                } else {
                    $('.login').hide();
                    $("body").append(data.html);
                }

            }
        });

在PHP中

 if (isset($_GET['r']))
 {
        echo 'r='.$_GET['r'];
        return explode('/',rtrim($_GET['r'], '/'));
    }

PHP将其解码为login / auth / a b 2

2 个答案:

答案 0 :(得分:1)

这是因为网址中的+符号表示空格。它基本上是%20的更短(且更易阅读)的版本。

发送+编码,就像使用任何其他特殊字符一样。编码+%2B。但实际上,encodeURIComponent应该已经这样做了。您是否可以在PHP中解码该网址两次?

答案 1 :(得分:0)

将apache重写规则标志更改为[NE,B,L,QSA]解决了这个问题。 这里设置B(Back Reference)标志以避免解码url组件。