How to solve JSON_ERROR_UTF8 error in php json_decode? How to solve JSON_ERROR_UTF8 error in php json_decode? php php

How to solve JSON_ERROR_UTF8 error in php json_decode?


There is a good function to sanitize your arrays.

I suggest you use a json_encode wrapper like this :

function safe_json_encode($value, $options = 0, $depth = 512, $utfErrorFlag = false) {    $encoded = json_encode($value, $options, $depth);    switch (json_last_error()) {        case JSON_ERROR_NONE:            return $encoded;        case JSON_ERROR_DEPTH:            return 'Maximum stack depth exceeded'; // or trigger_error() or throw new Exception()        case JSON_ERROR_STATE_MISMATCH:            return 'Underflow or the modes mismatch'; // or trigger_error() or throw new Exception()        case JSON_ERROR_CTRL_CHAR:            return 'Unexpected control character found';        case JSON_ERROR_SYNTAX:            return 'Syntax error, malformed JSON'; // or trigger_error() or throw new Exception()        case JSON_ERROR_UTF8:            $clean = utf8ize($value);            if ($utfErrorFlag) {                return 'UTF8 encoding error'; // or trigger_error() or throw new Exception()            }            return safe_json_encode($clean, $options, $depth, true);        default:            return 'Unknown error'; // or trigger_error() or throw new Exception()    }}function utf8ize($mixed) {    if (is_array($mixed)) {        foreach ($mixed as $key => $value) {            $mixed[$key] = utf8ize($value);        }    } else if (is_string ($mixed)) {        return utf8_encode($mixed);    }    return $mixed;}

In my application utf8_encode() works better than iconv()


You need simple line of code:

$input = iconv('UTF-8', 'UTF-8//IGNORE', utf8_encode($input));$json = json_decode($input);

Credit: Sang Le, my teamate gave me this code. Yeah!


The iconv function is pretty worthless unless you can guarantee the input is valid. Use mb_convert_encoding instead.

mb_convert_encoding($value, "UTF-8", "auto");

You can get more explicit than "auto", and even specify a comma-separated list of expected input encodings.

Most importantly, invalid characters will be handled without causing the entire string to be discarded (unlike iconv).