摘要:[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>