[PHP]上傳中文名稱檔案,會無法上傳

摘要:[PHP]上傳中文名稱檔案,會無法上傳

 
繼上一篇「[PHP]PHP簡易檔案上傳實作&問題」,這次是要討論,假如用中文檔名上傳的話,是否可成功上傳?
 
假若依上一篇來測試的話,是不可上傳的
第一直覺就是編碼問題,查詢了一下相關的資料,原來是move_uploaded_file不能直接解析中文,再傳送前就會編譯成亂碼
 
把上篇的upload.php裡的一段
move_uploaded_file($_FILES['file']['tmp_name'], 'file/'.$_FILES["file"]["name"]);
改為
move_uploaded_file($_FILES['file']['tmp_name'], 'file/'.iconv('utf-8','big5', $_FILES["file"]["name"]));
 
程式內碼如下:
「upload.php」
(修正了檔案重複上傳,發出警告訊息、中文編碼以及增加副檔名顯示)
<html>
    <head>
        <title>File_Upload</title>
        <meta http-equiv="content-type" charset="UTF-8"/>
    </head>
    <body>
    <h1>檔案上傳</h1>
<?php
    $file_name = iconv('utf-8','big5', $_FILES["file"]["name"]);
    if($_FILES['file']['error']>0){
        echo "檔案上傳失敗<br />";
        echo "Error: " . $_FILES["file"]["error"];
    }else if(file_exists("file/".$file_name)){
        echo "檔案已存在,請勿重複上傳相同檔案";
        }else{
            move_uploaded_file($_FILES['file']['tmp_name'], 'file/'.$file_name);
            echo "檔案連結:".'<a href="file/'.$_FILES['file']['name'].'">'.$_FILES["file"]["name"].'</a>';
            echo "<br />";
            echo "副檔名:".pathinfo('file/'.$_FILES['file']['name'], PATHINFO_EXTENSION)."<br />";
            echo "類型:".$_FILES['file']['type']."<br />";
            echo "大小:".iconv('utf-8','big5',(round($_FILES['file']['size']/1024,2)))."KB<br />";
    }
?>
    </body>
</html>