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 함수를 사용하면 잘못된 문자열이 문자열에서 제거됩니다. 다른 방법으로는 문자와 그 이후의 모든 문자가 빠져 있습니다.
예 : 필드 값
"프로모션 € 모바일"
은 다음과 같이 해석된다 : "프로모션 모바일"
지금까지 무엇을 사용하셨습니까? 당신을 돕기 위해 enconding 코드를 게시하십시오. – DannyG
유로 기호에 대한 문자가 내 보낸 CSV에 삽입됩니까? 힌트 : 메모장에서 csv를 열고 그 내용을 확인하십시오. 그것의 아마도 아마도 뭔가 csv 또는 아마도 csv에있는 변수의 캡슐을 깨고 그 저장 옵션에 추가 캡슐 필요합니다. – Dave
이 저에게 적합합니다 : http://3v4l.org/9b3s3. 입력 된 CSV가 유효하지 않은 것으로 간주합니다. 어딘가에 바이너리로 csv를 업로드 할 수 있습니까? – floww