我在 csv文件中执行简单的**fwrite**
在另一行中写一行:
//Clean maybe empty entries of last winners
$cleaned = array();
$tick = 0;
$debug = "";
if (($fh = fopen(LAST_WINNERS_PATH, 'r+b')) !== FALSE) {
if (flock($fh, LOCK_EX)) {
while (($row = fgetcsv($fh, 300, ';')) !== FALSE) {
$tick++;
foreach ($row as $key => $value) {
$row[$key] = stripslashes($value);
}
if ($row[0] != '') {
array_push($cleaned, $row);
}
}
array_reverse($cleaned);
ftruncate($fh, 0);
$count = count($cleaned);
foreach ($cleaned as $key => $row) {
$string = implode(";", $row);
if ($key < $count -1) {
$string .= PHP_EOL;
}
fwrite($fh, $string);
}
flock($fh, LOCK_UN);
} else {
}
fclose($fh);
} else {
}
现在我有两个问题:
所有内容都在 utf-8 中,但 csv文件在写入时每次都会转换回ANSI。为什么以及可以做些什么来阻止这种情况?
每次添加几个空格时,在第一行的前面。如何避免?
答案 0 :(得分:0)
对于这个问题,它更容易使用fputcsv
http://php.net/manual/de/function.fputcsv.php
它是为这样的东西而制造的。
<?php
$list = array (
array('aaa', 'bbb', 'ccc', 'dddd'),
array('123', '456', '789'),
array('"aaa"', '"bbb"')
);
$fp = fopen('file.csv', 'w');
foreach ($list as $fields) {
fputcsv($fp, $fields);
}
fclose($fp);
?>
来自php.net的例子。