Я делаю простой **fwrite**
в CSV файл писать одну строку AFTE другой:Нежелательные Пробелы и неправильное кодирование с 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 при записи на него. Почему и что можно предотвратить, чтобы предотвратить это?
Перед первой строкой каждый раз, когда добавляется несколько пробелов. Как этого избежать?
Покажите нам ваш 'fopen' и обработчик, также, вы считали' fputcsv'? – casraf
@ChenAsraf Я редактировал вопрос. fputcsv Я пробовал раньше, но сделал те же пробелы и кодирование. Поэтому я попробовал это с более элементарной функцией 'fwrite'. –
Начнем с того, почему вы используете двоичный режим? Используйте только «r +» или «w» или «w +» в зависимости от ваших потребностей, вам не нужно использовать двоичный флаг «b», потому что вы не ставите двоичную информацию в файл. – casraf