我已经为我的学校定制了一个JSON API,所以我可以查找家庭作业。让我们将结果字符串命名为**$result**。不幸的是,我返回的UTF-8格式似乎不正确。运行mb_check_encoding确认字符串是UTF-8编码的,但我无法解码JSON字符串。
当我对字符串使用json_decode时,它返回NULL,json_last_error()给我错误“JSON_ERROR_UTF8”= '格式错误的UTF-8字符,可能编码不正确'。
使用iconv("UTF-8", "UTF-8//TRANSLIT", $result)
会抛出PHP通知:
iconv():在C:\wamp\www\Tietgen\homework.php的输入字符串中检测到非法字符
使用iconv("UTF-8", "UTF-8//IGNORE", $result)
,返回了JSON结果,但是它在中间被截断(大概是在TRANSLIT检测非法字符的同一点),给了我JSON错误
发现意外的控制字符
执行json_decode(utf8_encode($result))
也会返回NULL
,并显示以下JSON错误:
语法错误,JSON格式不正确
回显utf8_encode($result)也被切断。
我有一个程序运行在我的组件上,叫做JSON查看器。当我从原始源(API,我正在访问)粘贴JSON时,它在JSON查看器中运行得很好。x1c 0d1x看起来JSON是有效的。
我已经被这个问题困扰了一段时间,有没有办法修复一个错误的UTF-8字符串?如果有,怎么做?:)
很遗憾,我无法共享API:/
另外,我可以看到iconv是相当资源密集型的,有没有可能有更好的方法?:)
1条答案
按热度按时间idfiyjo81#
我不知道@Jazerix的问题是否如下,我想可能有人也有同样的问题:
我从MySQL数据库中获取数据到一个PHP数组中,我在MySQL中设置列为
utf8_unicode_ci
,在PHP中设置字符集:$db->exec($sql, null, 'utf8');
我收到错误
语法错误,JSON格式不正确
因为我在数据库中有一个枚举列,而那个列没有UTF-8编码,我有一个选项叫做**'Campaña'**,那是键,'ñ'字符。
希望能帮上忙。