Я исследовал всюду и не могу понять это.
Я пишу тестовый запрос cUrl для проверки моей службы REST:
// initialize curl handler
$ch = curl_init();
$data = array(
"products" => array ("product1"=>"abc","product2"=>"pass"));
$data = json_encode($data);
$postArgs = 'order=new&data=' . $data;
// set curl options
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLINFO_HEADER_OUT, TRUE);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postArgs);
curl_setopt($ch, CURLOPT_URL, 'http://localhost/store/rest.php');
// execute curl
curl_exec($ch);
Это работает нормально, и мой сервис принимает запрос, и $ _Post заполняется по мере необходимости двумя переменными: заказом и данными. Данные имеют закодированный объект JSON. И когда я распечатываю $ _Post ['data'], он показывает:
{"products":{"product1":"abc","product2":"pass"}}
Это именно то, что ожидается и идентично тому, что было отправлено.
Когда я пытаюсь декодировать это, json_decode () ничего не возвращает!
Если я создаю новую строку и вручную набираю эту строку, json_decode () работает отлично!
Я пробовал:
strip_tags (), чтобы удалить все теги, которые могли быть добавлены в пост http
utf8_encode () для кодирования строки в требуемый utf 8
addlashes () для добавления косой черты перед кавычками
Ничего не работает.
Есть идеи, почему json_decode () не работает после получения строки из сообщения http?
Ниже приведена соответствующая часть моей обработки запроса на справку:
public static function processRequest($requestArrays) {
// get our verb
$request_method = strtolower($requestArrays->server['REQUEST_METHOD']);
$return_obj = new RestRequest();
// we'll store our data here
$data = array();
switch ($request_method) {
case 'post':
$data = $requestArrays->post;
break;
}
// store the method
$return_obj->setMethod($request_method);
// set the raw data, so we can access it if needed (there may be
// other pieces to your requests)
$return_obj->setRequestVars($data);
if (isset($data['data'])) {
// translate the JSON to an Object for use however you want
//$decoded = json_decode(addslashes(utf8_encode($data['data'])));
//print_r(addslashes($data['data']));
//print_r($decoded);
$return_obj->setData(json_decode($data['data']));
}
return $return_obj;
}