簡體   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