PHP json 编码 - 格式错误的 UTF-8 字符,可能编码不正确

2022-08-30 09:08:14

我正在使用一个数据数组,并且有一个包含俄语字符的字段。json_encode($data)

我用它来显示该字段的编码,并显示UTF-8。mb_detect_encoding()

我认为json编码失败是因为其中有一些不好的字符,比如“ра▒”。我在数据上尝试了很多东西,它会通过传递该错误,但随后数据看起来不再正确。utf8_encode

如何处理此问题?


答案 1

如果里面有一些非 utf8 字符,即使其中大多数是 utf8 字符,也会发生此问题。这将删除任何非 utf8 字符,现在它可以工作。

$data['name'] = mb_convert_encoding($data['name'], 'UTF-8', 'UTF-8');

答案 2

如果您有一个多维数组以JSON格式编码,则可以使用以下函数:

如果发生JSON_ERROR_UTF8:

$encoded = json_encode( utf8ize( $responseForJS ) );

以下函数用于以递归方式对数组数据进行编码

/* Use it for json_encode some corrupt UTF-8 chars
 * useful for = malformed utf-8 characters possibly incorrectly encoded by json_encode
 */
function utf8ize( $mixed ) {
    if (is_array($mixed)) {
        foreach ($mixed as $key => $value) {
            $mixed[$key] = utf8ize($value);
        }
    } elseif (is_string($mixed)) {
        return mb_convert_encoding($mixed, "UTF-8", "UTF-8");
    }
    return $mixed;
}

推荐