在json_encode出现故障之前使用UTF8字符串对数组进行编码

时间:2015-03-26 15:14:46

标签: php utf-8

我正在尝试使用array_walk处理一系列推文,将文本编码为UTF8,以便正确处理任何中文字符。

array_walk($tweet_data, function(&$tweet, $key) {
    $tweet['text'] = iconv('Windows-1250', 'UTF-8', $tweet['text']);
});

当我这样做时,我收到错误“检测到输入字符串中的非法字符”

我也尝试使用utf8_encode

array_walk($tweet_data, function(&$tweet, $key) {
        $tweet['text'] = utf8_encode($tweet['text']);
    });

这没有任何问题,但是当文本显示在页面上时,字符都是错误的。

如何在传入json_encode之前正确处理UTF8字符,这样才不会中断?

2 个答案:

答案 0 :(得分:1)

Windows-1250无法对中文进行编码:

  

Windows-1250是Microsoft Windows下用来表示的代码页   使用中欧和东欧语言的文本   拉丁文,如波兰语,捷克语,斯洛伐克语,匈牙利语,斯洛文尼亚语,   波斯尼亚语,克罗地亚语,塞尔维亚语(拉丁文),罗马尼亚语(1993年之前)   拼写改革)和阿尔巴尼亚语。它也可能与德国人一起使用   语言

ISO-8859-1

都不能
  

通常用于西欧语言(见下文a   列表)。

我认为你正试图从A转换为B而你不知道A是什么。如果您完全确定UTF-8已经不存在,那么您至少应该尝试一种具体designed to hold that lang的编码。

答案 1 :(得分:0)

这个简单的php函数递归地将数组的所有值转换为UTF8。 函数mb_detect_encoding(第4行)检查该值是否已经是UTF8,这样它就不会重新转换。

function utf8_converter($array)
{
    array_walk_recursive($array, function(&$item, $key){
        if(!mb_detect_encoding($item, 'utf-8', true)){
                $item = utf8_encode($item);
        }
    });

    return $array;
}