나는 CSV 파일을 받아들이고 모든 행을 배열로 읽어들이는 간단한 스크립트를 가지고있다. 그런 다음 첫 번째 행의 각 열을 순환합니다 (내 경우에는 설문 조사의 질문을 보유하고 있습니다). 설문 조사는 프랑스어로 이루어지며 질문의 첫 번째 문자가 특수 문자 (é, ê, ç 등) 일 때마다 fgetcsv는 간단히 생략합니다.fgetcsv()는 행의 시작 부분에있을 때 특수 문자를 무시합니다!
값의 중간에있는 특수 문자는 첫 문자 일 때만 영향을받지 않습니다.
나는 이것을 디버깅하려했지만 당황 스럽다. 나는 파일의 내용을 가진 위해서 var_dump를하고 문자가 확실히있다 :
var_dump(utf8_encode(file_get_contents($_FILES['csv_file']['tmp_name'])));
그리고 여기 내 코드입니다 :
if(file_exists($_FILES['csv_file']['tmp_name']) && $csv = fopen($_FILES['csv_file']['tmp_name'], "r"))
{
$csv_arr = array();
//Populate an array with all the cells of the CSV file
while(!feof($csv))
{
$csv_arr[] = fgetcsv($csv);
}
//Close the file, no longer needed
fclose($csv);
// This should cycle through the cells of the first row (questions)
foreach($csv_arr[0] as $question)
{
echo utf8_encode($question) . "<br />";
}
}
평범한 ASCII를 사용하는 경우 fgetcsv()는 바이너리 만 안전합니다. 즉, 전혀 그렇지 않습니다. http://stackoverflow.com/questions/3637770/why-fgetcsv-drops-some-characters-with-diacritics- 기본적으로 fgets()를 사용하여 데이터를 읽은 다음 맞춤 함수를 사용하여 CSV를 구문 분석합니다. 분명히이 또한 작동합니다 : http://stackoverflow.com/questions/1472886/some-characters-in-csv-file-are-not-read-during-php-fgetcsv – Piskvor