2013-03-05 1 views
2

Zip 폴더의 내 파일 이름은 "Norge språk.pdf"이고 zip 폴더의 압축을 푸는 동안 파일 이름은 "Norge spr † k.pdf ".PHP에서 ZipArchive를 사용하여 zip 폴더를 추출하는 동안 특수 문자가 발생합니다.

zip = new ZipArchive; 
if ($zip->open($path, ZIPARCHIVE::CREATE) === true) 
{ 
    if(!file_exists(WWW_ROOT."/excel/".$name)) 
    { 
     mkdir(WWW_ROOT."/excel/".$name, 0777); 
    } 
    for($i = 0; $i < $zip->numFiles; $i++) 
    { 
     $fileinfo = pathinfo($zip->getNameIndex($i, ZIPARCHIVE::FL_UNCHANGED)); 

     copy("zip://".$path."#".htmlentities($test, ENT_COMPAT, 'ISO-8859-1'), WWW_ROOT."/excel/".$name.'/'.htmlentities($fileinfo['basename'], ENT_COMPAT, 'ISO-8859-1')); 
    }     
    $zip->close();     
} 

누구든지이 문제에 대해 도와주세요.

+0

읽기 스택 오버플로 어딘가에 중복 질문이 이미 있다고 생각합니다. 계속 검색하십시오. –

+0

http://stackoverflow.com/questions/13267143/php-zip-contents-encoding –

답변

2

Cake PHP에 대해서는 잘 모르겠지만 실제 문제는 ZIP입니다. 문제는 압축 된 파일의 데이터가 바이너리 데이터로 취급되지 않는다는 것입니다. 이것은 자신의 파일/변수 처리에서 뿌리를 내릴 수 있습니다. php는 loose typed이며, 이는 변수의 타입이 PHP 엔진에 의해 자동으로 선택된다는 것을 의미합니다.

다른 것은 파일 이름의 처리입니다. 이 이름은 문자 데이터이며 ZIP 파일로 저장되며 인코딩 정보는 없습니다.

그래서 확실히 사용할 수있는 것은 7 비트 ASCII입니다. 그러나 ISO-Latin-1 코드 테이블이 광범위하게 사용되며 모든 스칸디나비아 특수 문자가 포함되어 있기 때문에 사용자가 직면하는 문제는 자동 변환에 의해 야기되는 경향이 있습니다. 컴퓨터에서 입력 한 파일 이름이 이어지지 않아야합니다. 거기에 다시 표시 될 때 어떤 차이점이 있나.

해결할하기 위해 제공되는 솔루션 : 당신의 성격 (other encoding) 또는 또는 인코딩과 같은

$zip->addFile($file_data['path'], iconv("UTF-8","CP852",$file_name)); 

사용 CP852 실제 문제를 보려면

system('unzip -o ' . $file); 

를 사용 친절 php zip contents encoding

+0

고맙습니다. 두 번째 해결책은 저에게 잘 맞습니다. –

+0

@VineelaYarlagadda 귀하의 솔루션이 작동하면 친절하게 답변을 수락하고 투표하십시오. – Vineet1982