2014-12-14 1 views
1
내가 다른 afte 한 줄 쓰기 csv 파일에 간단한 **fwrite**을하고 있어요

잘못 인코딩 :원하지 않는 공백과에 fwrite

  1. : 이제

    //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로 변환됩니다. 왜 이런 일을 막을 수 없습니까?

  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

이전에 사용되었습니다. 같은 것을 망 쳤어. –