在使用 Laravel 開發時,我們可能會遇到下載功能無法正確處理中文檔案名稱的問題。這個問題主要是由於在檔案名稱中包含有中文字元所導致的。要解決這個問題,我們需要對檔案名稱進行 URL 編碼。
在 PHP 中,可以使用 urlencode()
函數來編碼檔案名稱。但是,在 Laravel 中我們可以使用內建的 Str::slug()
方法來完成這個任務。
Str::slug()
方法可以將字串轉換為 URL 友善的 "slug" 格式。但是,我們可以選擇不傳入第二個參數,以保留原始字符,只進行 URL 編碼。
下面是一個範例程式碼:
public function downloadFile($filename) { $fullPath = storage_path('app/download/' . $filename); $headers = [ 'Content-Type' => 'application/octet-stream', ]; $escapedFilename = Str::slug($filename, ''); return response()->download($fullPath, $escapedFilename, $headers); }
在上面的程式碼中,我們使用了Str::slug()
方法將檔案名稱進行了編碼,並將編碼後的字串作為第二個參數傳遞給download()
方法。
透過這種方式,我們可以確保 Laravel 在處理下載檔案時能夠正確處理包含中文字元的檔案名稱。
以上是laravel 下載功能不能用中文的詳細內容。更多資訊請關注PHP中文網其他相關文章!