2014年8月12日 星期二

php 中文檔名上傳問題

使用 php 的檔案上傳,英文檔名都沒有問題,然而遇到中文檔名,就不行了!

Google了一下網路上相關文章很多,不外乎:

1. 用 iconv() 轉碼
2. 用 mb_convert_encoding() 轉碼

這兩個方法,我都試了,都是失敗的!為什麼呢?

還在找答案。

另外一個方法是,不管中文檔名了,上傳時將中文檔名,改成一個英數字的檔名,並且將原始中文檔名記錄到資料庫中,然後以改過的英數字檔名上傳。
顯示出來的上傳檔案列表資訊就抓資料庫中的原始名稱,而連結就連結到英數字的檔名。
這樣,大概就能解決中文檔名的問題了。



https://gist.github.com/AyoiS/7178911

解決檔案上傳時,PHP的basename函數不支援中文的方法
<?php
//php自帶的basename函數不支持中文,下面這個方法是最簡單的實現。
function get_basename($filename){
return preg_replace('/^.+[\\\\\\/]/', '', $filename);
}
  • preg_replace('/^.+[\\\\\\/]/', '', $FileName)
某些中文字可以,"山水"可以,但是其他的還是失敗了!

閱讀到網站上某網友的意見:好像這樣是比較好的解決方案了。

"我認為不太需要花時間在處理「中文」這件事情上了。
基本上我檔案上傳後,「中文」名稱是直接存進資料庫。
然後將上傳的檔案用另外的規則重新編檔(我是用日期時間+tmp_name再用md5壓成主檔名)
當然副檔名還是保留原來的。
下載的時候才從資料庫將中文檔名取出來「裝回去」。
使用者下載回來的還是正常的中文檔名檔案。"




沒有留言:

張貼留言