以下是我需要将.csv文件从一台服务器发布到另一台服务器的问题。
我通过阅读.csv文件的内容并使用curl将其作为发布数据发送。
这工作没有问题。
但是当我尝试解析数据并将其存储在数据库的表中时,麻烦就开始了。
我有一个数组中的所有变量,如果我打印这个数组,它显示正确。
但是,如果我从该数组中回显一个值,我会得到各种奇怪的字符。
我最好的猜测是它与csv文件的编码有关,但我不知道如何解决这个问题。
这里是我用来解析csv数据的函数:
public function parseCsv($data)
{
$quote = '"';
$newline = "\n";
$seperator = ';';
$dbQuote = $quote . $quote;
// Clean up file
$data = trim($data);
$data = str_replace("\r\n", $newline, $data);
$data = str_replace($dbQuote,'"', $data);
$data = str_replace(',",', ',,', $data);
$data .= $seperator;
$inquotes = false;
$startPoint = $row = $cellNo = 0;
for($i=0; $i
$char = $data[$i];
if ($char == $quote) {
if ($inquotes) $inquotes = false;
else $inquotes = true;
}
if (($char == $seperator or $char == $newline) and !$inquotes) {
$cell = substr($data,$startPoint,$i-$startPoint);
$cell = str_replace($quote,'',$cell);
$cell = str_replace('"',$quote,$cell);
$result[$row][$this->csvMap[$cellNo]] = $this->_parseValue($cellNo, $cell);
++$cellNo;
$startPoint = $i + 1;
if ($char == $newline) {
$cellNo = 0;
++$row;
}
}
}
return $result;
}任何帮助表示赞赏!
编辑:
好吧,经过一些更多的试验和错误,我发现它只是第一行有一些额外字符的第一个值。如果我回应这个值,那么在输出之后,所有输出都会搞砸。
所以我试图改变编码现在,如果我回声价值其一切良好,但我有一个新的问题,其字符串,但我需要一个int:
echo $val; //output: 7655 but messes up everything outputted after it
$val = mb_convert_encoding($val, "UTF-8");
echo $val // output: 7655
echo intval($val) //output: 0编辑:
预期产出:
7655Array ( [kenmerk] => ÿþ7655 [status] => 205 [status_date] => 1991-12-30 [dob] => 1936-09-04 ) succes搞砸了输出
7655牁慲ਨ††歛湥敭歲⁝㸽@㟾㘀㔀㔀††獛慴畴嵳㴠‾㈀㤀㔀††獛慴畴彳慤整⁝㸽 201ⴱ㈀ⴀ30 †嬠潤嵢㴠‾㤀㘀㘀-08〭㐀畳捣獥在我打印数组之后,我首先回应元素'kenmerk'
正如你在数组中看到的那样,元素'kenmerk'有一些额外的特性。
将数据转换为utf-8,如下所示:
$ data = mb_convert_encoding($ data,“UTF-8”);
消除了输出混乱的问题,并删除'ÿþ'(错误解释的BOM?),但我仍然不能将值转换为int
编辑:
好吧,我有点找到解决方案..
但因为我不知道为什么它的作品,我会很感激任何信息
var_dump((int) $val); // output: 0
var_dump((int) strip_tags($val); // output: 7655