所以我這個掙扎了一會兒,沒能找到解決方案。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
輸出編碼,這就是我想出了
第一行是從API源中的數據,第二行是來自外部CSV的數據。當我使用從文本導入Excel打開外部CSV文件導入時,文件來源被選中爲1250:中歐(Windows),當我將其更改爲UTF-8時,每個特殊符號都以此符號的形式出現。 當我嘗試打開最終生成的CSV文件時檢查文件來源爲8592:來自API的中歐(ISO)特殊標誌正常顯示,而來自該外部CSV的標誌顯示爲 。
也許,在指向有助於問題的癥結所在
嗯......怎麼會是數據編碼的你正在寫入CSV?它從何而來? – deceze
不知道我是否理解你的問題?第一組數據來自連接到本地數據庫的API,第二組數據來自該外部CSV。有沒有辦法檢查PHP中的數據編碼? –
也許從[在Web應用程序中處理Unicode前後]開始(http://kunststube.net/frontback/)和/或[每個程序員都絕對需要了解編碼和字符集以處理文本] (http://kunststube.net/encoding/)。 – deceze