當前位置: 首頁> 最新文章列表> 使用mb_scrub 過濾文件名字符串的示例代碼及詳細講解有哪些?

使用mb_scrub 過濾文件名字符串的示例代碼及詳細講解有哪些?

gitbox 2025-07-01

在處理文件上傳或文件操作時,文件名的安全性和合法性非常重要。非法的文件名可能導致系統錯誤、安全漏洞甚至文件覆蓋風險。本文介紹了一種基於PHP 的自定義函數mb_scrub ,用於過濾和規範文件名字符串,尤其適合包含多字節字符的場景。

mb_scrub 函數的設計理念

  1. 編碼統一<br> 為了正確處理多字節字符(如中文、日文、韓文等),首先使用mb_convert_encoding將輸入字符串統一轉成UTF-8 編碼,避免字符截斷或亂碼

  2. 字符過濾<br> 通過正則表達式,保留特定的合法字符集合通常文件名允許的字符有:

    • 英文字母(大小寫)

    • 數字

    • 下劃線_

    • 句點.

    • 連字符-

    這些字符既能滿足大多數文件名需求,也避免了特殊字符帶來的風險。

  3. 避免特殊開頭<br> 文件名以點開頭通常表示隱藏文件或特殊系統文件用ltrim去掉開頭多餘的點,確保不會無意中創建隱藏文件。

  4. 空字符串保護<br> 如果過濾後文件名為空字符串,自動賦予一個默認文件名(如default_filenam e ),防止後續文件操作出錯

示例代碼說明

示例中輸入文件名為非法文件名<>:"/\|?*.txt ,其中包含了許多非法字符。經過mb_scrub處理後,只剩下允許的字符,示例輸出如下:

 <span><span><span class="hljs-section">原始文件名:非法文件名&lt;&gt;:"/\|?*.txt</span></span><span>
過濾後文件名:txt
</span></span>

這裡示例較為簡單,實際項目中可以根據需求對允許字符集進行調整,或者結合額外規則(如限制長度、限制擴展名等)。

使用建議

  • 結合文件擴展名檢查:過濾文件名的同時,還應單獨驗證擴展名的合法性,防止惡意腳本文件上傳。

  • 限製文件名長度:避免文件名過長導致系統兼容性問題。

  • 路徑安全:過濾文件名不能完全代替路徑安全檢查,防止目錄遍歷等漏洞。

  • 多語言支持mb_scrub對多字節字符支持較好,適合國際化應用。

通過合理使用類似mb_scrub的函數,可以極大提昇文件名處理的安全性和穩定性,是PHP 文件上傳或文件操作的重要步驟之一。