[PHP] 使用 move_uploaded_file 上傳中文檔名的問題
在 PHP 中由網頁上傳檔案的功能,比起很多語法是簡單得太多了!但是如果用來上傳中文檔案名稱的檔案,許多人都會踢到鐵板。不是無法上傳,就上傳後檔名怪怪的。以下我們就針對這個問題來做一些研究。
PHP上傳中文檔案發生錯誤的原因在於中文版的伺服器若是使用 Big5 在編碼,而由網頁送過來資料卻是以 UTF8 來編碼,如此一來在接收時就會產生編碼的錯失,導致檔案上傳的失敗。我們建議您修改的方式,就是將接收到的檔名,由 UTF8 轉為 Big5 的編碼,最後再儲存即可。
說到 PHP 編碼的轉換,就不得不介紹 iconv 這個函數了,在 PHP5 之後這個函數已經內建在系統中。他的基本使用方式如下:
iconv( 原來的編碼 , 轉換的編碼 , 轉換的字串 )
例如我們要將 $tranString 這個變數的字串由 utf8 轉換為 big5 的編碼,方式如下:
iconv( "UTF-8" , "big5" , $tranString )
那回到我們的問題,這裡我們簡單做一個上傳的表單(upload.html)與上傳的程式(upload.php),等一下就是由上傳表單選好要上傳的檔案,再送到上傳的程式進行檔案上傳的動作:
首先是上傳的頁面:upload.html
<form action="upload.php" method="post" enctype="multipart/form-data">
<label for="fileupload">檔案上傳</label>
<input id="fileupload" type="file" name="fileupload" />
<input id="button" type="submit" name="button" value="送出" />
</form>
特別要注意的是在這個表單中 必須要加上 enctype="multipart/form-data" 把上傳的檔案編成表單的資料。
接著是處理上傳的程式:upload.php
<?php
$target_path = "uploadfiles/"; //指定上傳資料夾
$target_path .= $_FILES['fileField']['name']; //上傳檔案名稱
if(move_uploaded_file($_FILES['fileField']['tmp_name'],
iconv("UTF-8", "big5", $target_path ))) {
echo "檔案:". $_FILES['fileField']['name'] . " 上傳成功!";
} else{
echo "檔案上傳失敗,請再試一次!";
}
?>
您可以看到,在 move_upload_file 函數中,已經利用 iconv 將原來上傳檔案的名稱($target_path) 由 utf8 轉為 big5 了,如此在儲存時就能正確的儲存成中文檔名。
~節錄自藏經閣歡迎轉載,但請註明來源網站名稱和網址,文章若有侵權,請來信告知,我們會盡快處理~響應式網頁架站只要6,888元起|[RWD]響應式網站,自適應網頁,讓SEO搜尋引擎最佳化你的網站
"你是獵人還是獵物?"
0 comments :
張貼留言
1.猛甲茶道,歡迎多留言,可以幫自己網站打廣告~
2.需要 猛甲茶道 回覆,請勿使用匿名留言[可使用名稱/網址,名稱填自己名字,若無網址,請填E-mail]。
3.匿名攻訐、不相干之廣告適用於無條件刪去法,望請海涵:)
4.您可以使用一些 HTML 標記,如:
<b>粗體</b>, <i>斜體</i>, <a href='網址'>描述文字</a>