php编码后param值

时间:2010-10-08 06:52:05

标签: php encoding post parameters

正在使用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>

2.PHP:

<?php
echo $_POST['param'];
?>

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

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

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:5)

使用

data: 'param='+encodeURIComponent('a+b+c') 

而不是

data: 'param=a+b+c'

,您将能够正常使用数据而无需解码。

答案 2 :(得分:3)

使用 data: {param: 'a+b+c'}