php json_decode解析失敗およびエラー処理
jsonの処理について良い文章を見ました.decode解析に失敗したメソッドは、非常に詳細に書かれており、ここにロードされます.
一般的に、jsonコンテンツを取得し、直接json_decode($content,true)はarrayに変えて使いやすくなりました.しかし、jsonコンテンツを提供するインタフェースに問題があったり、与えられたjsonが標準的ではないか、いっそ間違っている場合は、問題を見つける方法を考えなければなりません.まずjsonを見てみましょうencodemanulhttp://cn2.php.net/manual/en/... 失敗時にNULLを返す
私たちはどのようにして間違いがどこにあるか知っていますか?
1、エラーコードを取得する
phpにはjsonがありますlast_Error関数、参照http://cn2.php.net/manual/en/... エラーコードが返され、エラーの原因を教えてくれます.エラーコードが読めませんか?json_を使うことができますlast_error_msg、見てhttp://cn2.php.net/manual/en/... でもjson_last_error_msgはphp>=5.5のみである.0バージョンしかありませんが、バージョンが低ければ、自分で定義しましょう.
2、低バージョンphp jsonエラーコード不全
でも、manualを見てみると、json_last_errorが定義した多くのエラーコードは高バージョンでしかないので、低バージョンのphpは料理をやめました.例えばJSON_ERROR_UTF 8というエラーコードは、json文字列に不正なutf 8文字があることを明確に示していますが、Php>=5.3.3にしかありません.悲しいことに、私のphpは5.3.です.2....
jsonフォーマットが間違っていたら、どんなに低いバージョンのphpでもJSON_を教えてくれます.ERROR_SYNTAXだからJSONにぶつかるERROR_NONEの最初の可能性は不正utf 8文字列に考えた.
3、jsonの不正utf 8文字の処理方法
utf 8の符号化範囲によれば、不正なutf 8文字を除去することができる.参照http://magp.ie/2011/01/06/rem...
ここでは不正な文字を?に置き換えます.必要に応じて自分で直す.
原文アドレス:php json_decode失敗
一般的に、jsonコンテンツを取得し、直接json_decode($content,true)はarrayに変えて使いやすくなりました.しかし、jsonコンテンツを提供するインタフェースに問題があったり、与えられたjsonが標準的ではないか、いっそ間違っている場合は、問題を見つける方法を考えなければなりません.まずjsonを見てみましょうencodemanulhttp://cn2.php.net/manual/en/... 失敗時に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関数、参照http://cn2.php.net/manual/en/... エラーコードが返され、エラーの原因を教えてくれます.エラーコードが読めませんか?json_を使うことができますlast_error_msg、見てhttp://cn2.php.net/manual/en/... でもjson_last_error_msgはphp>=5.5のみである.0バージョンしかありませんが、バージョンが低ければ、自分で定義しましょう.
2、低バージョンphp jsonエラーコード不全
でも、manualを見てみると、json_last_errorが定義した多くのエラーコードは高バージョンでしかないので、低バージョンのphpは料理をやめました.例えばJSON_ERROR_UTF 8というエラーコードは、json文字列に不正なutf 8文字があることを明確に示していますが、Php>=5.3.3にしかありません.悲しいことに、私のphpは5.3.です.2....
, json_last_error JSON_ERROR_NONE(0) , , php 。 , ....
jsonフォーマットが間違っていたら、どんなに低いバージョンのphpでもJSON_を教えてくれます.ERROR_SYNTAXだからJSONにぶつかるERROR_NONEの最初の可能性は不正utf 8文字列に考えた.
3、jsonの不正utf 8文字の処理方法
utf 8の符号化範囲によれば、不正なutf 8文字を除去することができる.参照http://magp.ie/2011/01/06/rem...
//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失敗