php csv 亂碼

edited 十月 2013 in PHP新手區
csv 屬性係big5,所以要轉變utf-8
localhost 可以睇到文字
但internet 不能睇到文字,出現亂碼
有無人試過類似情況?


header("Content-type:text/html;charset=utf-8");
$handle = fopen("csv/c.csv", "r");
$check_column= fgetcsv($handle, 1000, ",");



while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);

$row++;

if($row!=0){ // 第一筆不讀入,若您的CSV檔案內容包含欄位名稱上此判斷句

for ($c=0; $c < $num; $c++) {
$tmp[$c] = mb_convert_encoding($data[$c], 'UTF-8', 'big5'); //將取得的資料暫時存於$tmp陣列中

}

echo $tmp[1];
echo $tmp[3];
}
}

原始討論: http://twpug.net/x/modules/newbb/viewtopic.php?topic_id=4302

評論

  • edited 七月 2009
    你所謂的網路上是指?免費或付費空間?
    那麼就有可能是host那邊的問題
    mb類的函數也不一定是有編譯進去的
  • edited 七月 2009
    免費空間
    只係試下不同function..都係唔得啊
  • edited 七月 2009
    有港文
    不想看-.-
  • 280280
    edited 七月 2009
    哩共ㄟ哇巄礦某
    阿細哩ㄎ一悶拔郎厚阿!!

    今醬細公咩ㄊ一ㄤ
  • edited 七月 2009
    哩共ㄟ哇巄礦某
    阿細哩ㄎ一悶拔郎厚阿!!

    今醬細公咩ㄊ一ㄤ

    ?? =="
  • edited 七月 2009
    台語你看不懂??
    沒關係,就跟你發的港文一樣

    況謀苗靜
    灣況屋各赫
  • 280280
    edited 七月 2009
    你的問題看不懂!!
    所以一直無法了解你的問題
    愛莫能助!!

    之前我的發文是使用台語的用語
    希望你能體諒!!

    PS.給香港的朋友
    文字的用意是在於

    溝通與記錄

    並不是在製造溝通的障礙
    使用一般通俗,或說大家都看的懂,的文字與文法
    是溝通的基本

    既使問題無法解決
    大家也都很有熱心與誠意

    這是 kiang 大的網站
    多有放肆,還請見諒!!
  • edited 七月 2009
    我嘗試用台語?不知你們看得懂?
    csv 屬性是big5,所以要轉換到utf-8
    localhost 可以看到文字
    但internet 不能看到文字,換來亂碼的文字
    有無人試過類似情況?
    我用的是免費空間
    只是試過不同的function..都是不能看到文字。
    例如︰iconv, mbstring, 等 都是無效。


    header("Content-type:text/html;charset=utf-8");
    $handle = fopen("csv/c.csv", "r");
    $check_column= fgetcsv($handle, 1000, ",");



    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    $num = count($data);

    $row++;

    if($row!=0){ // 第一筆不讀入,若您的CSV檔案內容包含欄位名稱上此判斷句

    for ($c=0; $c < $num; $c++) {
    $tmp[$c] = mb_convert_encoding($data[$c], 'UTF-8', 'big5'); //將取得的資料暫時存於$tmp陣列中

    }

    echo $tmp[1];
    echo $tmp[3];
    }
    }
  • edited 七月 2009
    可以透過 phpinfo() 檢查是否有 'iconv support' 或 'Multibyte Support' ,接著檢查看看 disable_functions 有沒有任何設定,一般免費空間的限制較多。
  • edited 七月 2009
    有嘗試切換browser語系嗎
    可能網站將語系鎖死
    所以不會依照header轉成UTF-8
  • 280280
    edited 七月 2009
    有一個問題,一個方向建議

    問題是!!

    CSV 檔本身是 Big5 編碼
    請問如果不做任何編碼轉換
    頁面使用 Big5 顯示
    這樣的資料顯示是正常的嗎??

    方向是!!

    可以將 CSV 檔轉成 UTF8 編碼格式讀看看
    轉換的方式很簡單
    使用小作家開啟 CSV 檔
    另存新檔時,下面有個編碼格式,選則 UTF8 編碼

    這個測試是
    不透過編碼轉換函數
    看是不是編碼轉換函數的問題!
  • edited 七月 2009
    我測試完成,都是不能看到文字,
    亂碼真是很麻煩
  • 280280
    edited 七月 2009
    這樣來看的話就非常的奇怪了

    因為都已經不透過編碼轉換函式
    直接秀內容都還是亂碼,這有點奇怪

    請問一下?
    上述的兩種測試時,是否有 check 一下
    -->瀏覽器<--網頁的編碼設定是否正確

    也就是
    Big5 顯示時,網頁編碼是否是 Big5
    UTF-8 顯示時,網頁編碼是否是 UTF-8

    還是你不知道什麼是,-->瀏覽器<--的網頁編碼顯示設定??
    這可能要先確認一下!!
    header("Content-type:text/html;charset=utf-8"); <--不是 PHP 的開頭語系設定
    要不可能會雞同鴨講,偵錯方向一直無法確定

    如果以上你都 check ok 還是不行

    再提供你一個測試方向

    就是連 fgetcsv 的函數都不要用
    直接讀檔然後直接秀出每一行的資料內容
    看是否還是會有亂碼

    這樣做的用意是
    把所有的可能函數問題排除
    減化到最基本

    讀出 -> 不做任何處理顯示

    要是這樣還不行
    就......

    把你的測試網站網址貼出來
    順便貼 php_info(); 的網址
    讓懂系統設定的人幫你看那邊設定有問題

    直接讀出顯示的程式,你參考看看
    $filename="csv/c.csv";
    $f_id=fopen($filename,"r");
    $contents = fread($f_id, filesize($filename));
    fclose($f_id);

    $tt=explode(chr(10),$contents);
    for($i=0;$i<count($tt);$i++)
    {
    echo $tt[$i]."<br>\n";
    }
  • edited 七月 2009
    終於解決csv 難題,
    原來是fgetcsv問題,它不能處理亂碼問題
    全靠280 提供code ,難題才能解決。
    在下萬分感激,如果你有任何難題,可以問我,以作報恩。^^
    再一次感謝
Sign In or Register to comment.