закодированные php значения post-param - PullRequest
1 голос
/ 08 октября 2010

Экспериментировал с некоторыми базовыми постами http с php и столкнулся с этой проблемой.

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 ]

5 голосов
/ 08 октября 2010

Использование

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

вместо ф

data: 'param=a+b+c'

и вы сможете нормально использовать данные без декодирования.

5 голосов
/ 08 октября 2010

Тип содержимого не имеет ничего общего с URL-запросом, содержащим +, поскольку этот символ является URL-кодированным эквивалентом пробела в RFC 1738. Используйте% 2B в качестве независимой от библиотеки альтернативы.

3 голосов
/ 08 октября 2010

Использование data: {param: 'a+b+c'}

...