您现在的位置是:首页 >其他 >PHP接收到的字符串中含有不可见字符的问题和处理方法网站首页其他
PHP接收到的字符串中含有不可见字符的问题和处理方法
一个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);