Re: [請益] 開啟csv讀取裡面的資料都會亂碼
※ 引述《sdallan ()》之銘言:
: 小弟我嚐試著在讀取.csv檔案內的資料
: 在測試看看要印出來
: 發現都出現亂碼
: <meta http-equiv="content-type" content="text/html" charset="utf-8">
: 網頁本身有設定為 utf-8
: 用 $row[1] = iconv("big5","utf8",$row[1]);
: 能請教是我哪邊沒用好嗎?
因為 php 的 fgetcsv 有問題(你 999% 沒有自己寫 parser 齁)。
你可以參考這個寫法。
<?php
class CsvParser
{
var $headers = array();
var $fields = array();
var $numRecords = 0;
function CsvParser($file, $readHeaders = true, $delim = ",")
{
if (file_exists($file))
{
$fp = fopen($file, "r");
if (!$fp)
{
echo '囧,,你餵我什麼';
return;
}
if ($readHeaders === true)
{
$this->headers = $this->getcsv($fp, $delim);
}
while ($data = $this->getcsv($fp, $delim))
{
$this->fields[] = $data;
$this->numRecords++;
}
fclose($fp);
}
else
{
echo '檔案不在喔';
return;
}
}
function getcsv($fp, $delim)
{
if ($fp = fgets($fp, 4096))
return explode($delim, $fp);
else
return false;
}
function getRecord($num)
{
if ($num >= 0 && $num < $this->numRecords)
return $this->fields[$num];
else
return array();
}
};
?>
上面是一個簡單的 Parser
下面是用法:
$csv = new CsvParser ($_FILES['file']['tmp_name'], false, ',');
for ($k = 0; $k < $csv->numRecords; $k++)
{
if($k > 0)
{
$ROW = $csv->getRecord($k);
print_r($ROW);
// $ROW[2] = iconv("big5","UTF-8",$ROW[2]);
}
}
--
任性是我僅有的溫柔..
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.228.144.213
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
PHP 近期熱門文章
PTT數位生活區 即時熱門文章