我正在为我的应用程序使用php和CURL。我使用curl post方法将一些细节推送到服务器。我将json字符串发布到server.This json字符串包含类似的值
"state":"jammu & Kashmir"
但是当我尝试使用服务器中的$_POST
收集数据时,它会在"state":"jammu
处中断并且服务器没有获得完整的json字符串。我如何解决此问题。我应该使用哪种功能。我应该在客户端使用urlencode,在服务器端使用urldecode。
function index()
{
$ch = curl_init();
$post = array('id'=>'11','name'=>'jammu & kashmir','active'=>4);
$post = json_encode($post);
$formatorder = "string=".$post;
curl_setopt($ch, CURLOPT_POSTFIELDS, $formatorder);
curl_setopt($ch, CURLOPT_URL, "http://localhost/rest/index.php/api/example/user");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, TRUE);
print_r(curl_error($ch));
$output = curl_exec($ch);
curl_close($ch);
echo '<pre>';
print_r($output);
}
答案 0 :(得分:1)
这听起来像是一个没有被编码的&符号的问题(即当您发布数据时,&符号被解释和破坏)。
在发布过程中,您需要正确转换&符号(即%26
之类的内容)。
如果您正在进行客户端发布(通过jQuery,AJAX或类似内容),请参阅:encodeURIComponent
答案 1 :(得分:0)
如果仅POST一个JSON字符串,则应该将请求的Content-Type标头设置为application/json
,然后从PHP原始输入中读取数据。 $_POST
仅填充表单编码的内容类型,并且需要传递正确形成的查询字符串,以便构建$_POST
数组。
从PHP原始输入读取很简单。它看起来像这样:
// get JSON string from raw input
$json = file_get_contents('php://input');
// decode the JSON string to a usable data structure
$data = json_decode($json);
采用这种方法可以避免对数据进行url编码并构建查询字符串。您目前遇到的问题是当您发布类似
的内容时{"state":"jammu & Kashmir"}
不使用application/json
内容类型,PHP假定&
是查询字符串的参数分隔符。要使用查询字符串和$_POST
,您需要形成如下的查询字符串:
json=[URL-encoded JSON string]
然后在$_POST['json']
中获取POSTed数据。