2011年3月24日 星期四

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

沒有留言: