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 } ?>