2013-12-15 4 views
0

이 코드는 압축 파일의 파일 이름 (영어의 경우는 히브리어)을 제외하고 원하는 파일로 ZIP 파일을 만들기 위해 제대로 작동합니다. 알맞은 히브리 문자 대신에 이상한 문자들. PHP ZipArchive 영어가 아닌 파일 이름이 아카이브 내에서 펑키 한 파일 이름을 반환합니다.

<?php 
$filesfordown = $_POST['GEMin']; 
    if(empty($filesfordown)) 
    { 
     echo "No files were seleceted for download."; 
    } 
    else 
    { 
$zip_name = "RMW." . time() . ".zip"; 
$zip = new ZipArchive; 
$zip->open($zip_name, ZipArchive::CREATE); 
foreach ($filesfordown as $filefordown) { 
    $zip->addFile($filefordown); 
} 
$zip->close(); } 

header('Content-Type: application/zip'); 
header("Content-disposition: attachment; filename='$zip_name'"); 
header('Content-Length: ' . filesize($zip_name)); 
readfile($zip_name); 

ob_flush; 
?> 

나는 몇 가지가 그의 iconv, setlocalte, 또는 mb_convert_encoding 도움이 될 것 같습니다, 주변 검색,하지만 무엇이든 내가 작동하지 않았다 시도했다.

아이디어가 있으십니까?

P. 측면 질문으로, 지퍼에 디렉토리 구조를 유지하지 않는 방법이 있습니까?

ETA :. $_post의 예는 www.domain.com/path/ 할 수있다 שלום_01 MP3

+0

이 보인다. PHP? id = 53948 – Daniel

답변

5

야호! 결정된!

우선 코드, 다음 설명 : 필요한

<?php 
setlocale(LC_ALL, 'he_IL.UTF-8'); 
$filesfordown = $_POST['GEMin']; 
    if(empty($filesfordown)) 
    { 
     echo "לא נבחרו.. נסה שוב"; 
    } 
    else 
    { 
$zip_name = "RMW" . time() . ".zip"; 
$zip = new ZipArchive; 
$zip->open($zip_name, ZipArchive::CREATE); 
echo "מכין את ההורדה..."; 
foreach ($filesfordown as $filefordown) { 
    $zip->addFile($filefordown, iconv("UTF-8","CP862",basename($filefordown))); 
} 
$zip->close(); 

3 일이 변경 될 수 있습니다.

  1. 실제 PHP 파일이 UTF-8인지 확인하십시오.
  2. setlocale()에는 끝에 .UTF-8이 있어야합니다.
  3. ZipArchive가 UTF-8을 올바르게 처리하지 못합니다. CP를 사용해야합니다. 히브리어는 CP862입니다. 따라서, addFile에 대한 추가 옵션 $localname을 사용하고 기본적으로 iconv("UTF-8","CODE_PAGE_REF",$localname)
1

또한 작동 : https://bugs.php.net/bug이 오래된 버그가있을 수 있습니다처럼 iconv("UTF-8", "CP852", $nameFile);