PHP接口接收到的字符串中含有不可见字符的处理方法

PHP/Apache/Nginx

一个pb客户端用iinet.PostURL(ls_url,lblb_args,ls_header,port,ir)传进来的json。格式是没有问题的。用echo可以显示是正常的。只是无法转换成php的数组和对象(json)。所以调试中耽搁了很多时间,特别写下来以备大家的不时之需。

原因:”php://input”收到的字符串中有不可见字符串(也可能是很多空格在末尾)。造成 json_decode无法处理。

解决办法:rtrim()

//取master和detail 转载自: http://www.powerbuilder.ltd

$postjson = file_get_contents(“php://input”);

//debug数据

/*$postjson = '{"main_order_id":"' . "2023042123341329795" .

'","order_id":'. "1" .

',"status":"' . "true" .

'","break_id":' . "11" .

',"false_reason":"' . "出票成功" .

'","alipay_trade_no":"' . "123456789" .

'","ticket_12306_id":"' . "12306123456" .

'","alipay_account":"' . "22@22.com" .

'","tickets":[' .

'{"sub_order_id":"' . "1" .

'","certificate_num":"' . "301121201805159415" .

'","real_ticket_price":"' . "111.00" .

'","buy_coach":"' . "05" .

'","buy_seat_number":"' . "25C" .

'","buy_bunk":"' . "" . '"},' .

'{"sub_order_id":"' . "2" .

    '","certificate_num":"' . "360983201705067823" .

    '","real_ticket_price":"' . "111.00" .

    '","buy_coach":"' . "05" .

    '","buy_seat_number":"' . "25A" .

    '","buy_bunk":"' . ""  . '"}' .

']}'; */

//解析json

$postjson = rtrim($postjson); //json_decode输出时是null,所以通过echo “|aaa|” . $postjson . “|bbb|”; 输出时,发现有aaa没有bbb。考虑是字符串后面有不可见字符。所以造成json_decode无法工作。

//json转对象

$postarr = json_decode($postjson);

var_dump($postarr);