使用fwrite的不需要的空格和错误的编码

时间:2014-12-14 11:56:26

标签: php

我在 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 {
    }

现在我有两个问题:

  1. 所有内容都在 utf-8 中,但 csv文件在写入时每次都会转换回ANSI。为什么以及可以做些什么来阻止这种情况?

  2. 每次添加几个空格时,在第一行的前面。如何避免?

1 个答案:

答案 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的例子。