php编码后param值

let*_*nje 1 php parameters post encoding

正在尝试使用PHP的一些基本的http帖子,并遇到了这个问题.

1.PHP:

<head>
    <script src="/scripts/jquery.js"></script>
</head>
<body>

    <script>
        function hw(){
            $.ajax({
              type: 'POST',
              url: '/2.php',
              data: 'param=a+b+c',
              success: function(d){
                console.log('server said ' + d);
              }
            });

        }
    </script>
    <button onclick="javascript:hw();">CLick me</button>
</body>
Run Code Online (Sandbox Code Playgroud)

2.PHP:

<?php
echo $_POST['param'];
?>
Run Code Online (Sandbox Code Playgroud)

ajax调用以'abc'而不是'a + b + c'返回.为什么'+'被编码为''(空格)?

然后我尝试使用post请求的内容类型'text/plain'而不是默认值'application/x-www-form-urlencoded'.在这种情况下,$_POST['param']出来是空的?我想了解这两种情况究竟发生了什么.我在服务器端如何取回原始数据('+')?

bco*_*sca 5

内容类型与包含+的URL查询无关,因为该符号是每个RFC 1738的空间的URL编码等效项.使用%2B作为库无关的替代方法.


Joy*_*abu 5

使用

data: 'param='+encodeURIComponent('a+b+c') 
Run Code Online (Sandbox Code Playgroud)

代替

data: 'param=a+b+c'
Run Code Online (Sandbox Code Playgroud)

并且您将能够正常使用数据而无需解码.