首頁 > 後端開發 > php教程 > 如何在 PHP 中安全地建立具有 UTF-8 檔案名稱的目錄?

如何在 PHP 中安全地建立具有 UTF-8 檔案名稱的目錄?

Mary-Kate Olsen
發布: 2024-12-06 09:06:11
原創
638 人瀏覽過

How Can I Safely Create Directories with UTF-8 Filenames in PHP?

將PHP 檔案系統函數與UTF-8 字串結合使用

在PHP 中,在使用檔案系統函數時處理UTF- 8 字串可能會帶來挑戰。考慮以下場景:

$dir_name = "Depósito";
mkdir($dir_name);
登入後複製

在此範例中,嘗試建立名為「Depósito」的資料夾。但是,在 Windows 資源管理器中檢視時,該資料夾的名稱顯示為“Depósito”,非 UTF-8 字元會變形。

解決方案:對UTF-8 字串進行Urlencoding

要解決此問題,建議的方法是在將字串與檔案系統函數一起使用之前對其進行urlencode。 Urlencoding 確保所有字元都轉換為有效格式。

$dir_name_encoded = urlencode("Depósito");
mkdir($dir_name_encoded);
登入後複製

透過對字串進行urlencoding,非UTF-8 字元將轉換為其編碼的對應字符,從而允許使用正確的名稱建立資料夾.

注意事項

雖然urlencoding是一種有效的解決方案,它引入了一些注意事項:

  • 編碼的檔案名稱不得超過 255 個字元。
  • 如果一個字元存在多個 UTF-8 表示(例如,使用組合字元),則規範化可能是一致性所必需的。
  • 使用標準函數按字母順序排序需要解碼檔名並使用 UTF-8感知排序

替代解決方案(不太理想)

其他不太理想的解決方案包括:

  • ISO-8859 -1 相容性:將檔案名稱符限制為可以表示的字元ISO-8859-1。使用 utf8_decode() 轉換 UTF-8 字串,然後將其與檔案系統函數一起使用,並使用 utf8_encode() 轉換 scandir 傳回的檔案條目。

注意事項:

  • 如果 中存在任何非 ASCII 位元組,此方法可能會失敗檔案名稱。
  • Windows 在不同的語言環境中可能會使用不同的編碼,需要使用更複雜的轉換函數。

音譯:

中在UTF-8 相容性至關重要的情況下,請考慮使用音譯將非ASCII 字元轉換為與目標相容的等效ASCII 字元檔案系統。

以上是如何在 PHP 中安全地建立具有 UTF-8 檔案名稱的目錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板