當前用戶可以隨意上傳文件。因此在上傳的文件中有空格,字符如ß, ü
等等。與其他用戶相比,可以下載這些文件(包括URL中的空格等)。它以這種方式工作,但根據RFC1738 - Uniform Resource Locators (URL)只能使用字母數字字符[a-zA-Z0-9]
和一些特殊/保留字符。我認爲應該避免空的空間。允許用戶上傳/下載文件名的字符
目前我在服務器上的文件名中獲得ß
a ß
。想要下載文件的用戶從MySQL數據庫(utf8_unicode_ci)獲取正確的字符(ß),因此可以在服務器上找到該文件。
- 什麼是處理文件名的正確方法?
- 我應該進行文件名檢查並禁止上傳嗎?
- 我應該在用戶上傳後重命名服務器上的文件(例如
str_replace()
,urlencode()
,...)嗎?
如何找出「文件系統上的編碼和文件系統與用於上傳文件名稱的字符集兼容」?是的,應該使用UTF-8。 Web服務器是Apache,數據庫服務器是MySQL 5.0.77,連接使用'SET NAMES utf8'設置,瀏覽器可以是任何人,上傳是通過'POST'和'multipart/form-data',HTML的編碼是'UTF-8 '。在Firebug中,文件鏈接提供的HTTP HTML響應具有'Content-Type \t application/x-www-form-urlencoded',但我從來沒有做過什麼(默認?)。 – testing 2012-04-17 11:43:02
所以'Content-Disposition'不會是我想要的。文件名如何被標準化和驗證? – testing 2012-04-17 11:44:33
@testing:你自己用字符串處理來做到這一點。 – hakre 2012-04-17 11:53:16