2014-12-14 2 views
1

Я делаю простой **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 { 
    } 

Теперь у меня есть два вопроса:

  1. Все находится в utf-8, но файл csv преобразует каждый раз обратно в ANSI при записи на него. Почему и что можно предотвратить, чтобы предотвратить это?

  2. Перед первой строкой каждый раз, когда добавляется несколько пробелов. Как этого избежать?

+1

Покажите нам ваш 'fopen' и обработчик, также, вы считали' fputcsv'? – casraf

+0

@ChenAsraf Я редактировал вопрос. fputcsv Я пробовал раньше, но сделал те же пробелы и кодирование. Поэтому я попробовал это с более элементарной функцией 'fwrite'. –

+0

Начнем с того, почему вы используете двоичный режим? Используйте только «r +» или «w» или «w +» в зависимости от ваших потребностей, вам не нужно использовать двоичный флаг «b», потому что вы не ставите двоичную информацию в файл. – casraf

ответ

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.

+0

Используется раньше. Точно. –

Смежные вопросы