14.6. php 上傳中文檔名的檔案

by Wiseguy.bbs@bbs.nsysu.edu.tw

另開一個 <input type="hidden" name="filename"> 在 submit 前,把 file 裡的檔名取出來 (用 split('\\'),陣列最後一個。) 放到 filename 去,這樣就可知道原檔名是什麼,而不用 file 裡面處理的檔名。 這種作法可以使中文檔名、含空白、管道字元 | 、反斜線,通通可上傳。

不管 meta 的 charset 為 Big5 或 UTF-8 皆可。

<?php
<head>
<meta HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8">
</head>
if($_FILES['userfile']['name']) {
  if (move_uploaded_file($_FILES['userfile']['tmp_name'], $_POST['fname'])) {
   echo "File is valid, and was successfully uploaded.\n";
   echo "<a href=".urlencode($_POST['fname']).">".$_POST['fname']."</a>";
  } else {
   echo "Possible file upload attack!\n";
  }
} else {
?>
<script language="JavaScript">
function validate() {
  var Ary = document.uploadf.userfile.value.split('\\');
  document.uploadf.fname.value=Ary[Ary.length-1];
  return true;
}
</script>
<form enctype="multipart/form-data" action="index.php" method="post"
 name="uploadf" onsubmit="return validate()">
  Send this file: <input name="userfile" type="file">
  <input type="hidden" name="fname">
  <input type="submit" value="Send File">
</form>
<?php } ?>

WWW: http://www.php.net/manual/en/features.file-upload.php