| 經驗交流 |
|
|---|---|
|
取得使用者上傳檔案的原始檔名 | |
問題說明 | |
| 當我們設計一個可供使用者上傳檔案的介面時,如果需要取得其原始檔名的話,您得提防中文字裡頭的特殊字元。 | |
| 舉例來說,我們分別將兩個圖檔命名為「中山大學.jpg」與「成功大學.jpg」,再同時上傳;到了伺服器端時,您將會發現前者的原始檔名依然不變,而後者會變成「大學.jpg」。這是因為「成功大學.jpg」裡頭有個「功」字,而此字的後半字元為 ASCII 92(\)。一旦檔名中含有此一字元,PHP 將無法完整取得其原始檔名。 | |
| 怎麼辦呢?請參考以下這種處理方式。 | |
我的做法 | |
| 原本我們會使用以下這種方式來接受使用者上傳檔案。 | |
|
<form action="act.php" name="DemoForm" method="POST" enctype="multipart/form-data"> <input type="file" name="UserFile"> <input type="submit" value="Send File"> </form> | |
|
現在,我們在其中多加一組隱藏的表單元件,並且在表單被傳送之前,利用 JavaScript 將原始檔名擷取下來另外存放。 | |
|
<form action="act.php" name="DemoForm" method="POST" enctype="multipart/form-data" onsubmit="return Final_Check( );"> <input type="file" name="UserFile"> <input type="hidden" name="Original"> <input type="submit" value="Send File"> </form> <script language="JavaScript"> function Final_Check( ) { var Ary = document.DemoForm.UserFile.value.split('\\'); document.DemoForm.Original.value = Ary[Ary.length-1]; return true; } </script> | |
|
當檔案傳到伺服器端以後,您便可以改用 $_POST["Original"] 來取得原始檔名,以避免 $_FILES["UserFile"]["name"] 可能出錯的狀況。 | |
| 我將上述程式寫成以下的範例,您可以自行試用看看。 | |
|
| |
| 2004.7.27 | |
| 經驗交流 |
|


問題說明