正在使用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']
是空的吗?我想了解这两种情况究竟发生了什么。我该如何在服务器端取回原始数据('+')?
答案 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'}