iT邦幫忙

DAY 4
3

遭遇PHP之經驗分享系列 第 4

[鐵人賽Day4]上傳中文名稱檔案,會無法上傳

繼上一篇「[鐵人賽Day3]PHP簡易檔案上傳實作&問題」,這次是要討論,假如用中文檔名上傳的話,是否可成功上傳?

假若依上一篇來測試的話,是不可上傳的
第一直覺就是編碼問題,查詢了一下相關的資料,原來是move_uploaded_file不能直接解析中文,再傳送前就會編譯成亂碼
(參考資料:http://injerry.pixnet.net/blog/post/27860604-%5Bphp%5Dmove\_uploaded\_file-utf-8-%E7%9A%84%E4%B8%AD%E6%96%87%E6%AA%94%E6%A1%88%E5%90%8D%E4%B8%8A%E5%82%B3%E5%95%8F%E9%A1%8C)

因此,把上篇的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」
(修正了檔案重複上傳,發出警告訊息、中文編碼以及增加副檔名顯示)

        <title>File_Upload</title>
        <meta http-equiv="content-type" charset="UTF-8"/>
    
    
    <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 />";
    }

?>
    

上一篇
[鐵人賽Day3]PHP簡易檔案上傳實作
下一篇
[鐵人賽Day5]PHP MySQL讀取中文時亂碼問題
系列文
遭遇PHP之經驗分享30

1 則留言

1
jabawork
iT邦新手 3 級 ‧ 2016-05-18 14:07:07

有些big5沒有的文字應該上傳失敗吧?right ?

Neil iT邦新手 5 級‧ 2018-08-17 22:51:27 檢舉

我要留言

立即登入留言