php:当utf-8失败时json_encode测试

时间:2018-01-30 15:14:10

标签: php json encoding utf-8 character-encoding

我在数据库中遇到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字符串的方法吗?回到十六进制切割问题并返回到utf-8或其他东西?
  3. 在这种情况下,使用目标更好地存储字符串的答案是无用的!

1 个答案:

答案 0 :(得分:0)

使用预定义的字符集可以在字段中写入最差的内容!

如果数据无法恢复且必须快速修复?! 这是一个脏但不是完全丢失的方法,以防止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;
}