CURL服务器脚本没有获取post值

时间:2014-04-23 16:16:50

标签: php json curl

我正在为我的应用程序使用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);
    }

2 个答案:

答案 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数据。