2016-06-15 14 views
0

所以我這個掙扎了一會兒,沒能找到解決方案。PHP:數據是不是在同一個字符集

我的問題是,我從生成CSV API,它有一些克羅地亞跡象了。它順利,我用這個功能來生成CSV文件

function generateCSV($arr, $option) { 
    if ($option == 'Products') { 
     $fp = fopen('csv/products.csv', 'w'); 

     foreach ($arr as $key => $value) { 
      fputcsv($fp, $value, ";"); 
     } 
    } 
} 

,當我不得不提取不同的服務器上,從一個CSV文件中的數據發生問題,包括它代入方程。我認爲該文件的編碼弄亂了事情。

我的CSV看起來像這樣

參考數據:名稱|隨機列..... |描述

的描述中部分是我包括從不同的服務器的其它CSV文件的一個。我將它保存到一個文件的代碼的一部分在這裏:

function generateDescriptionCSV(){ 
    $ch = curl_init('http://www.---.hr/---/--/Proizvodi.csv'); 
    $fp = fopen('csv/products_descriptions.csv', 'w'); 

    curl_setopt($ch, CURLOPT_FILE, $fp); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 

    curl_exec($ch); 
    curl_close($ch); 
    fclose($fp); 
} 

所以我必須的數據來源。一個是API提供的數據庫調用,第二個是我使用CURL生成的這個文件。當我將這些數據粘合在一起時,來自API的數據顯示正常,而來自外部CSV的數據看起來不錯,除了在這種情況下非常重要的克羅埃西亞標誌。

當我嘗試使用UTF-8編碼在Excel中打開最終CSV文件,我得到這樣的事情。

05-120000 Mozaik PLO č一個SA dodacima,23x17,5x4,8Ç59.99 64 KREATIVNI SETOVI,普日博爾ZA IZRADU SPOL:設置Z ZA slaganje mozaik SLIKA,設定自身 sastoji OD PLOë ZA nabadanje 16x21釐米,192 komada nabadalica raznih 。色彩我oblika,TE posudice古謝zajedno小號PLO?OM?INI kofer?我? ZA spremanje nabadalica(18x23x4釐米)

問號應顯示完全相同上面的字符,這是č

當我打開這兩個最終的CSV文件和在記事本中的外部和然後嘗試「另存爲」他們找到的文件的編碼的第一個文件,我得到UTF-8和第二個ANSI

有什麼建議?

編輯

我打過電話通過mb_detect_encoding輸出編碼,這就是我想出了

http://shorttext.com/7a59c8f1

第一行是從API源中的數據,第二行是來自外部CSV的數據。當我使用從文本導入Excel打開外部CSV文件導入時,文件來源被選中爲1250:中歐(Windows),當我將其更改爲UTF-8時,每個特殊符號都以此符號的形式出現。 當我嘗試打開最終生成的CSV文件時檢查文件來源爲8592:來自API的中歐(ISO)特殊標誌正常顯示,而來自該外部CSV的標誌顯示爲 。

也許,在指向有助於問題的癥結所在

+0

嗯......怎麼會是數據編碼的你正在寫入CSV?它從何而來? – deceze

+0

不知道我是否理解你的問題?第一組數據來自連接到本地數據庫的API,第二組數據來自該外部CSV。有沒有辦法檢查PHP中的數據編碼? –

+0

也許從[在Web應用程序中處理Unicode前後]開始(http://kunststube.net/frontback/)和/或[每個程序員都絕對需要了解編碼和字符集以處理文本] (http://kunststube.net/encoding/)。 – deceze

回答

0

我已經使用這個功能iconv('windows-1250','UTF-8', $data[33]);改變字符串編碼成UTF-8終於解決了我的問題

相關問題