修复格式错误的UTF-8字符串

时间:2014-04-07 22:01:53

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

我为学校准备了一个自定义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:\瓦帕\ 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)也被切断了。

我在我的comp上运行了一个名为JSON Viewer的程序。当我从原始源(api,我正在访问)粘贴JSON时,它在JSON Viewer中完美运行。 enter image description here 这看起来像JSON是有效的。

我已经坚持了一段时间,有没有办法修复格式错误的UTF-8字符串?如果是这样,怎么样? :)

不幸的是我无法分享API:/

另外,我可以看到iconv资源密集,是否有更好的方法? :)

1 个答案:

答案 0 :(得分:0)

我不知道@Jazerix问题是否如下,我可能有人有同样的问题:

我从MySQL数据库获取数据到PHP数组。我将MySQL中的列设置为utf8_unicode_ci,并在PHP中设置charset:$db->exec($sql, null, 'utf8');

我收到错误

  

语法错误,格式错误的JSON

因为我在数据库中有一个枚举列,并且该列没有UTF-8编码。我有一个名为'Campaña'的选项,这是关键的'ñ'字符。

希望它有所帮助。