繁体   English   中英

在json_encode麻烦之前使用UTF8字符串编码数组

[英]Encoding an array with UTF8 strings before json_encode trouble

我正在尝试使用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字符,使其不会损坏?

Windows-1250无法编码中文:

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

ISO-8859-1都不能:

通常用于西欧语言(请参阅下面的列表)。

我认为您正在尝试从A转换为B,但您不知道A是什么。 如果您完全确定还不是UTF-8,则至少应尝试一种专门用于保存lang的编码。

这个简单的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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM