2010-02-23 4 views
12

PHP를 통해 사용자가 업로드 한 CSV 파일을 구문 분석하려고하는데 제대로 작동하지 않습니다.인용 부호가없는 CSV가 fgetcsv와 호환되지 않습니다.

올바르게 포맷 된 여러 개의 CSV 파일을 업로드했지만 정상적으로 작동했습니다. Excel에서 내 보낸 CSV 파일을 가져 오는 사용자가 많아 문제가 있습니다. 나는 그 파일들을 나의 파일과 비교해 보았고 엑셀 파일들이 모두 엔트리 주위에 따옴표가 없다는 것을 알아 차렸다. 그 외에도, 그들은 동일합니다. Open Office로 열어 저장하면 아무런 변화없이 작동합니다. 그래서 저는 그것이 인용문과 관련되어 있음을 확신합니다.

내 질문은; 이러한 부적절한 형식의 CSV는 어떻게 읽습니까?

업데이트 : 원인을 찾았습니다!

이것은 Mac 버전의 Excel에만 해당됩니다. 줄 바꿈은 임의의 이유로 Mac에서 다르게 처리되므로 fgetcsv를 사용하기 전에이 작업을 수행해야합니다.

ini_set('auto_detect_line_endings',TRUE); 
+0

코드를 표시하고 문제가 무엇인지 알려 주실 수 있습니까? 우리는 포맷팅에 관계없이 fgetcsv()를 아무런 문제없이 사용합니다. – jasonbar

+0

이 친구를 보내 주셔서 감사합니다 !! 생명의 은인 –

답변

22

이것은 Mac 버전의 Excel에만 해당됩니다. 줄 바꿈은 임의의 이유로 Mac에서 다르게 처리되므로 fgetcsv를 사용하기 전에이 작업을 수행해야합니다.

ini_set('auto_detect_line_endings',TRUE); 
+0

감사합니다! 완벽하게 작동합니다. – tbradley22

+0

Freaking. 굉장해. 발견. – Stegrex

1

manual page of fgetcsv 보면, 프로토 타입은 다음과 같습니다

array fgetcsv (resource $handle [, int $length 
    [, string $delimiter = ',' [, string $enclosure = '"' 
    [, string $escape = '\\' ]]]]) 

$enclosure(즉, 4 매개 변수)의 기본값은 큰 따옴표.

인클로저가 필요하지 않도록 지정하고 해당 네 번째 매개 변수에 빈 문자열을 지정하면 어떻게됩니까?

(물론 이는 현재 작동하는 것을 깨뜨릴 수 있습니다. 즉, 큰 따옴표로 묶인 파일이있는 파일과 첫 번째 파일에서 읽을 수없는 파일의 두 가지 경우를 처리해야합니다. 사례)

+0

그래, 나는 그것을 보았다. 하지만, 당신이 말했듯이, 그것은 현재 작동하는 것을 무너 뜨립니다. 저장되는 형식을 확인하고 적절하게 동작을 전환하는 간단한 방법이 있습니까? –

+0

일부 정규식을 사용하면 파일의 형식을 결정할 수 있다고 가정합니다. 다른 솔루션은 항상 첫 번째 * (가장 빈번한 경우) * 솔루션을 시도하고, 작동하지 않으면 두 번째 솔루션을 시도하십시오.; 당신의 파일의 모든 라인이 아마 같은 방식으로 형식화되어 있다고 가정하면, 첫 번째 줄에 대해서만 테스트를하면된다. 이것은 fgetcsv에 1 회 쓸데없는 호출을한다는 것을 의미한다. –

+0

나는 그것을 시도했다, 그것은 빈 인클로저가 작동하지 않는다는 것을 알게되었다 ... –

관련 문제