真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

phpjson之decode解析失敗的示例分析

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)php json之decode 解析失敗的示例分析,文章內(nèi)容豐富且以專(zhuān)業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

我們提供的服務(wù)有:做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、武都ssl等。為上千余家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢(xún)和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的武都網(wǎng)站制作公司

php json_decode解析失敗的解決辦法:1、通過(guò)json_last_error等函數(shù)獲取錯(cuò)誤碼;2、根據(jù)utf8的編碼范圍剔除掉非法utf8字符。

本文操作環(huán)境:windows7系統(tǒng)、PHP7.1版,DELL G3電腦

php json_decode 解析失敗怎么辦?

php json_decode解析失敗及錯(cuò)誤處理

一般情況下,獲取到一段json內(nèi)容,直接json_decode($content, true)就轉(zhuǎn)成array來(lái)用了,很方便。
但是,如果給你提供json內(nèi)容的接口出了點(diǎn)問(wèn)題,給的json不標(biāo)準(zhǔn)或是干脆有錯(cuò)誤,那就要想辦法來(lái)找出問(wèn)題了。
先看看json_encode的manul
https://www.php.net/manual/en/function.json-last-error.php

失敗時(shí)返回NULL

 //  $json = '{"a":1,"b":2,"c":3,"d":4,"e":5, "name":"Corwien"}'; 
 $json = '{"a":1,"b":2,"c":3,"d":4,"e":5, "name":}';  //錯(cuò)誤的json格式
 $result = json_decode($json, true);
  if(!$result)
  {
        //error handle ,錯(cuò)誤處理
        $ret = json_last_error();
        print_r($ret);   //打印為: 4,查錯(cuò)誤信息表,可知是語(yǔ)法錯(cuò)誤
        
  }   

json_last_error錯(cuò)誤msg對(duì)照表:
0 = JSON_ERROR_NONE
1 = JSON_ERROR_DEPTH
2 = JSON_ERROR_STATE_MISMATCH
3 = JSON_ERROR_CTRL_CHAR
4 = JSON_ERROR_SYNTAX
5 = JSON_ERROR_UTF8

我們?nèi)绾沃厘e(cuò)在哪里了呢?

1、獲取錯(cuò)誤碼

php有一個(gè)json_last_error函數(shù),見(jiàn)
https://www.php.net/manual/en/function.json-last-error.php

它會(huì)返回錯(cuò)誤碼告訴我們是什么原因出錯(cuò)了。
錯(cuò)誤碼看不懂?可以用json_last_error_msg,見(jiàn)
https://www.php.net/manual/en/function.json-last-error-msg.php

不過(guò)json_last_error_msg只在php >= 5.5.0版本才有,如果版本低,就自己定義一個(gè)吧。

2、低版本php json錯(cuò)誤碼不全

但是,注意看manual就會(huì)發(fā)現(xiàn),json_last_error定義的很多錯(cuò)誤碼都是在高版本里才有的,低版本的php就歇菜了。例如JSON_ERROR_UTF8這個(gè)錯(cuò)誤碼明白地告訴我們json字符串中有非法utf8字符,但是只在Php >= 5.3.3中才有。而很悲劇的是,我的php就是5.3.2....

所以,如果你的json_last_error返回的是JSON_ERROR_NONE(0) ,并不是說(shuō)沒(méi)有錯(cuò)誤,而只是這個(gè)錯(cuò)誤在你的低版本php中沒(méi)有定義。再說(shuō),沒(méi)有錯(cuò)誤怎么會(huì)失敗呢....

如果是json格式錯(cuò)誤,再低版本的php都會(huì)告訴你JSON_ERROR_SYNTAX,所以碰上JSON_ERROR_NONE第一個(gè)可能性就往非法utf8字符串想.

3、如何處理json中的非法utf8字符

根據(jù)utf8的編碼范圍,是可以剔除掉非法utf8字符的。
可以參見(jiàn)https://magp.ie/2011/01/06/remove-non-utf8-characters-from-string-with-php/

//reject overly long 2 byte sequences, as well as characters above U+10000 and replace with ?
$some_string = preg_replace('/[\x00-\x08\x10\x0B\x0C\x0E-\x19\x7F]'.
 '|[\x00-\x7F][\x80-\xBF]+'.
 '|([\xC0\xC1]|[\xF0-\xFF])[\x80-\xBF]*'.
 '|[\xC2-\xDF]((?![\x80-\xBF])|[\x80-\xBF]{2,})'.
 '|[\xE0-\xEF](([\x80-\xBF](?![\x80-\xBF]))|(?![\x80-\xBF]{2})|[\x80-\xBF]{3,})/S',
 '?', $some_string );
 
//reject overly long 3 byte sequences and UTF-16 surrogates and replace with ?
$some_string = preg_replace('/\xE0[\x80-\x9F][\x80-\xBF]'.
 '|\xED[\xA0-\xBF][\x80-\xBF]/S','?', $some_string );

這里是把非法字符替換成?,根據(jù)需要自己改。

上述就是小編為大家分享的php json之decode 解析失敗的示例分析了,如果剛好有類(lèi)似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


本文標(biāo)題:phpjson之decode解析失敗的示例分析
文章路徑:http://weahome.cn/article/pddihi.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部