php: json_encode test, когда utf-8 не работает

У меня проблемы с неудачными кодировками символов UTF-8 в базе данных. Когда я читаю его с помощью php и json_encode(), json_encode($content) терпит неудачу и возвращает пустую строку.

$test = array('meep' => base64_decode('7b6Y'));
echo json_encode($test)."\n";

if(json_last_error() == JSON_ERROR_UTF8) {
    echo "fail\n";
}

Скажите, почему это не печатает ничего, кроме "провалиться". Или лучше, каков был входной контент.

  1. Есть ли способ обнаружить JSON_ERROR_UTF8 без необходимости вызова json_encode. Как json_test или что-то еще?
  2. Вы знаете метод восстановления строки с ошибкой utf-8? Вернемся к hex, чтобы решить проблему и вернуться к utf-8 или что-то еще?

В этом случае ответы с целью сохранения строки лучше бесполезны!

-1
источник поделиться
1 ответ

В поле можно писать хуже, с предопределенной кодировкой!

Если данные не могут быть восстановлены, и они должны быть исправлены быстро?! Вот грязный, но не полный метод потери, чтобы предотвратить сбой с json_encode():

if(!mb_check_encoding($oldContent, "UTF-8")) {
    $newContent = '';
    for($e = 0; $e < count($oldContent); $e++) {
        if(mb_check_encoding($oldContent[$e], "UTF-8")) {
            $newContent .= $oldContent[$e];
        } else {
            trigger_error("Bad char at ".$e);
        }
    }
    $oldContent = $newContent;
}
0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос