0

からjsonでエンコードされた応答を返す関数があります$_POST

function getdatafrompost(){
    $raw  = '';     
    $httpContent = fopen('php://input', 'r');
    while ($kb = fread($httpContent, 1024))
        $raw .= $kb;        
    fclose($httpContent);      
    $params = array();
    parse_str($raw, $params);
    if (isset($params['data'])) 
        $retdata = json_decode(stripslashes($params['data']));
    else
        $retdata = json_decode(stripslashes($raw)); <====Returns Null
    return $retdata;
}

読み取られる生データは次のとおりです。

{"recordid":"099ac8aa-0a43-11e2-860f-0016177c526f","ntsdataid":"","trkdataid":"5628af8e-08db-11e2-860f-0016177c526f","activitydate":"2012-09-29","activitytime":"10:36:21","activityname":" from S. Interrante","activitynote":"<i><font color=\"99CC00\" size=\"4\"><b><font face=\"verdana\">fgsdfgsdgsdfgsdgsdgsdfg</font>\u200b</b></font></i>"}

問題は$retdatanullを返すことです。これは、HTML を含む「activitynote」フィールドにあるようです。"activitynote" に HTML が含まれていない場合、データは適切に解析されます。データを解析するためのより良いアプローチはありますか? 私は何か間違ったことをしていますか?

4

1 に答える 1

0

使用することは想定されていませんstripslashes。置換する必要があるこのエラーを修正するには、jsonドキュメントの有効性に影響します。

json_decode(stripslashes($raw))

json_decode($raw);

$raw = '{"recordid":"099ac8aa-0a43-11e2-860f-0016177c526f","ntsdataid":"","trkdataid":"5628af8e-08db-11e2-860f-0016177c526f","activitydate":"2012-09-29","activitytime":"10:36:21","activityname":" from S. Interrante","activitynote":"<i><font color=\"99CC00\" size=\"4\"><b><font face=\"verdana\">fgsdfgsdgsdfgsdgsdgsdfg</font>\u200b</b></font></i>"}' ;
var_dump(json_decode($raw));

出力

object(stdClass)[1]
  public 'recordid' => string '099ac8aa-0a43-11e2-860f-0016177c526f' (length=36)
  public 'ntsdataid' => string '' (length=0)
  public 'trkdataid' => string '5628af8e-08db-11e2-860f-0016177c526f' (length=36)
  public 'activitydate' => string '2012-09-29' (length=10)
  public 'activitytime' => string '10:36:21' (length=8)
  public 'activityname' => string ' from S. Interrante' (length=19)
  public 'activitynote' => string '<i><font color="99CC00" size="4"><b><font face="verdana">fgsdfgsdgsdfgsdgsdgsdfg</font>​&lt;/b></font></i>' (length=105)
于 2012-09-29T15:05:47.503 に答える