2014-09-27 92 views
1

我的php項目是關於在列表中顯示文件和目錄,用戶可以在文件目錄之間瀏覽,通過文件名稱和其他名稱搜索文件。我的問題是,如果我搜索一個文件,它會發現它(不管它的名字是英語還是希臘語),但如果我選擇下載的文件不是英文,它的名稱將爲空。例如,如果它的名字是「σουβλάκι.php」,並且我選擇下載它,那麼我將下載的填充名爲「.php」。我相信它與utf-8有關,但我無法弄清楚。任何想法都將非常有用。 在情況下,它可以幫助,這是我的download.php代碼:php項目,非英文名稱的文件在下載時有空白名稱

<?php 
setlocale (LC_ALL, "el_GR.UTF-8"); 
$file = $_GET["file"]; 
if (mb_detect_encoding($file)=="ISO-8859-1"){ 
$file = utf8_encode("$file"); 
} 
if (file_exists($file)) { 
header('Content-Description: File Transfer'); 
header('Content-Type: application/octet-stream'); 
header("Content-Type: application/force-download"); 
header('Content-Disposition: attachment; filename=' . urlencode(basename($file))); 
// header('Content-Transfer-Encoding: binary'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header('Pragma: public'); 
header('Content-Length: ' . filesize($file)); 
ob_clean(); 
flush(); 
readfile($file); 
exit; 
} 
?> 

,這是我的index.php

<?php 

    define("SUBFOLDER","http://192.168.1.3/webserver"); 
    define("ROOT","/var/www/webserver"); 
?> 

<head> 
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 
<meta name="viewport" content="width=device-width, initial-scale=1.0"> 

<link href="<?php echo SUBFOLDER."/"; ?>css/myCSSfile.css" rel="stylesheet" type="text/css"> 
<link rel="shortcut icon" href="<?php echo SUBFOLDER."/"; ?>images/dit.ico"> 
<link rel="stylesheet" href="<?php echo SUBFOLDER."/"; ?>css/search.css"> 
<link rel="stylesheet" href="<?php echo SUBFOLDER."/"; ?>css/button.css"> 
<link rel="stylesheet" href="<?php echo SUBFOLDER."/"; ?>css/button2.css"> 
<script type="text/javascript" src="<?php echo SUBFOLDER."/"; ?>js/resolutionfinder.js"></script> 
<script type="text/javascript" src="<?php echo SUBFOLDER."/"; ?>js/changeInputValue.js"></script> 
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
<script type="text/javascript" src="<?php echo SUBFOLDER."/"; ?>js/ajaxcalls.js"></script> 





<body onload='ShowDivInCenter();' onresize='ShowDivInCenter();'> 
    <div class="cont"> 
     <div id="main"> 
      <?php 
       error_reporting(E_ALL); 
       if ($_GET['action']=="view"){ 
        include_once("foldercontents.php"); 
       } 
       else if ($_GET['action']=="downloadZip"){ 
        include_once("downloadZip.php"); 
       } 
       else if ($_GET['action']=="downloadfile"){ 
        include_once("download.php"); 
       } 
       else { 
        include_once("foldercontents.php"); 
       } 
      ?> 
     </div> 
    </div> 
</body> 
+1

你嘗試'函數utf8_encode()'文件名? – 2014-09-27 00:28:15

+0

我在第3行的download.php中添加了這個。我還在某處讀到我不應該在index.php上使用所以我也刪除了它。雖然結果是一樣的。 – 2014-09-27 17:21:31

+1

哦,我剛剛看到你正在使用'basename()',如果你需要使用'basename()',你必須在你的情況下使用'basename()''''''''''''''''''''''''''''''''''''''''' (LC_ALL,'希臘');'也許''setlocale(LC_ALL,'gr_GR.UTF8');' – 2014-09-27 18:03:29

回答

0

首先我加入的setlocale()作爲拉奇鉀對的download.php當說我下載非英文命名文件的名稱不是blank.php,但它是%AC%BC%58%.. more%something.php。然後我改變了urlencode(basename($ file)));到基地名稱($文件);現在它工作正常。如果因爲不需要,我也刪除了第一個。 這是前:

<?php 
$file = $_GET["file"]; 
if (mb_detect_encoding($file)=="ISO-8859-1"){ 
$file = utf8_encode("$file"); 
} 
if (file_exists($file)) { 
header('Content-Description: File Transfer'); 
header('Content-Type: application/octet-stream'); 
header("Content-Type: application/force-download"); 
header('Content-Disposition: attachment; filename=' . urlencode(basename($file))); 
// header('Content-Transfer-Encoding: binary'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header('Pragma: public'); 
header('Content-Length: ' . filesize($file)); 
ob_clean(); 
flush(); 
readfile($file); 
exit; 
} 
?> 

,這是正確的:

<?php 
setlocale (LC_ALL, "el_GR.UTF-8"); 
$file = $_GET["file"]; 
if (file_exists($file)) { 
header('Content-Description: File Transfer'); 
header('Content-Type: application/octet-stream'); 
header("Content-Type: application/force-download"); 
header('Content-Disposition: attachment; filename=' . basename($file)); 
header('Content-Transfer-Encoding: binary'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header('Pragma: public'); 
header('Content-Length: ' . filesize($file)); 
ob_clean(); 
flush(); 
readfile($file); 
exit; 
} 
?> 
相關問題