中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php json之decode 解析失敗的示例分析

發布時間:2021-09-10 10:08:04 來源:億速云 閱讀:165 作者:柒染 欄目:編程語言

這期內容當中小編將會給大家帶來有關php json之decode 解析失敗的示例分析,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

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

本文操作環境:windows7系統、PHP7.1版,DELL G3電腦

php json_decode 解析失敗怎么辦?

php json_decode解析失敗及錯誤處理

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

失敗時返回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":}';  //錯誤的json格式
 $result = json_decode($json, true);
  if(!$result)
  {
        //error handle ,錯誤處理
        $ret = json_last_error();
        print_r($ret);   //打印為: 4,查錯誤信息表,可知是語法錯誤
        
  }   

json_last_error錯誤msg對照表:
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

我們如何知道錯在哪里了呢?

1、獲取錯誤碼

php有一個json_last_error函數,見
https://www.php.net/manual/en/function.json-last-error.php

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

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

2、低版本php json錯誤碼不全

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

所以,如果你的json_last_error返回的是JSON_ERROR_NONE(0) ,并不是說沒有錯誤,而只是這個錯誤在你的低版本php中沒有定義。再說,沒有錯誤怎么會失敗呢....

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

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

根據utf8的編碼范圍,是可以剔除掉非法utf8字符的。
可以參見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 );

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

上述就是小編為大家分享的php json之decode 解析失敗的示例分析了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大方县| 河南省| 鸡东县| 邯郸县| 抚宁县| 米脂县| 府谷县| 东阳市| 凤翔县| 安岳县| 瑞昌市| 木里| 沂水县| 青铜峡市| 宁城县| 陆河县| 蒲城县| 乾安县| 微山县| 巫溪县| 安塞县| 眉山市| 江孜县| 昌宁县| 雷山县| 南宁市| 兖州市| 芦山县| 平原县| 鸡东县| 阿坝| 重庆市| 宜都市| 嘉荫县| 金塔县| 郧西县| 平安县| 星子县| 鄂温| 当阳市| 屯昌县|