2013-12-17 2 views
0

CSV 파일을 내보내는 PHP 스크립트가 있습니다. 내 사용자는 Excel에서 파일을 편집하고 저장 한 다음 다시 업로드합니다.Excel에서 CSV를 가져올 때 문자 인코딩 문제가 발생합니까?

유로 기호를 필드에 입력하면 파일을 업로드 할 때 유로 기호와 그 이후의 모든 것이 누락됩니다. 나는 str_getcsv 함수를 사용하고 있습니다.

인코딩을 UTF-8로 변환하려고하면 유로화 기호가 사라지고 문자 마커가 누락됩니다 (일반적으로 다이아몬드에 빈 칸이나 물음표로 표시됨).

인코딩을 UTF-8로 변환하는 방법뿐만 아니라 유로화 기호 (및 기타 비표준 문자)도 유지 하시겠습니까?

편집 : 여기

내 코드입니다 :

/** 
* Decodes html entity encoded characters back to their original 
* 
* @access public 
* @param String The element of the array to process 
* @param Mixed The key of the current element of the array 
* @return void 
*/ 
public function decodeArray(&$indexValue, $key) 
{ 
    $indexValue = html_entity_decode($indexValue, ENT_NOQUOTES, 'Windows-1252'); 
} 

/** 
* Parses the contents of a CSV file into a two dimensional array 
* 
* @access public 
* @param String The contents of the uploaded CSV file 
* @return Array Two dimensional-array. 
*/ 
public function parseCsv($contents) 
{ 
    $changes = array(); 
    $lines = split("[\n|\r]", $contents); 

    foreach ($lines as $line) { 
     $line = utf8_encode($line); 
     $line = htmlentities($line, ENT_NOQUOTES); 
     $lineValues = str_getcsv($line); 
     array_walk($lineValues, 'decodeArray'); 
     $changes[] = $lineValues; 
    } 

    return $changes; 

나는 또한 시도 한 대신 utf8_encode 기능의 다음

iconv("Windows-1252", "UTF-8//TRANSLIT", $line); 

또한 단지 :

$line = htmlentities($line, ENT_NOQUOTES, 'Windows-1252'); 

utf8_encode 함수를 사용하면 잘못된 문자열이 문자열에서 제거됩니다. 다른 방법으로는 문자와 그 이후의 모든 문자가 빠져 있습니다.

예 : 필드 값

"프로모션 € 모바일"

은 다음과 같이 해석된다 : "프로모션 모바일"

+0

지금까지 무엇을 사용하셨습니까? 당신을 돕기 위해 enconding 코드를 게시하십시오. – DannyG

+0

유로 기호에 대한 문자가 내 보낸 CSV에 삽입됩니까? 힌트 : 메모장에서 csv를 열고 그 내용을 확인하십시오. 그것의 아마도 아마도 뭔가 csv 또는 아마도 csv에있는 변수의 캡슐을 깨고 그 저장 옵션에 추가 캡슐 필요합니다. – Dave

+0

이 저에게 적합합니다 : http://3v4l.org/9b3s3. 입력 된 CSV가 유효하지 않은 것으로 간주합니다. 어딘가에 바이너리로 csv를 업로드 할 수 있습니까? – floww

답변

0

당신의 CSV의 시작 부분에 다음을 추가 파일

chr(239) . chr(187) . chr(191) 
+0

불행히도 작동하지 않았습니다. 필드 값 : "Promo € Mobile"은 이제 "Promo"로 해석됩니다. – simbro

관련 문제