2013-02-02 47 views
1

我正在嘗試清理上傳文件的文件名。清理上傳文件的名稱

我想取代一切,這是不是一個數字或字母,並將其替換空間 -

我:

$finalName = preg_replace('/[^a-z0-9][ ]/', '-', strtolower(substr($finalName, 0, strpos($finalName, '.')))) ; 

不工作。

有人可以幫我解決我的正則表達式嗎?

需要注意的是:

substr($finalName, 0, strpos($finalName, '.')) 

僅僅是如此它的工作原理上的文件名,而不是點或擴展。

+4

不要消毒上傳的文件名,使自己的!當有人上傳衝突名稱的文件時會發生什麼?當有人開始消毒時會發生什麼?您的文件名應該基於順序。 – Brad

+0

@Brad優秀的一點,我決定採取您的建議,並讓用戶輸入一個seo友好的圖像名稱,例如描述性圖像名稱,然後進行驗證。 – imperium2335

+0

我做的是:不要將用戶文件存儲在doc根目錄中。絕不允許用戶指定文件名。將文件信息保存在數據庫中,然後根據請求返回文件數據。基本上,您以這種方式製作安全透明的存儲機制。另外,絕對不要相信用戶的內容類型。 – Brad

回答

0

你忘了使用正則表達式中

/[^a-z0-9]+|[ ]+/ 
     ^