[英]PHP problem when extracting a zip file with non-latin characters in the filenames
[英]PHP detecting filesystem encoding/saving files with non-latin filenames
我需要使用PHP在文件系統上保存帶有非拉丁文件名的文件。
我想讓這項工作跨平台。 我怎么知道我可以使用什么編碼來編寫文件? 我知道許多現代文件系統都是基於UTF-8(這是正確的嗎?),但我懷疑Windows XP(例如)。
那么,是否有一個強大的檢測機制?
不是你的問題的答案,但如果你不需要在文件系統級別上進行大量操作(比如搜索,排序......),那么在這個SO問題中概述的問題有一個很好的跨平台解決方法: URLEncode()
文件名。
Hörensägen.txt
變成了
H%c3%b6rens%c3%a4gen.txt
這應該是安全的在任何文件系統中使用,並能夠映射任何UTF-8字符。
我發現這比嘗試“本地”處理主機操作系統的功能要好得多,這保證是復雜且容易出錯的(除了操作系統的差異,我確定各種文件系統格式 - FAT16,FAT32,NTFS ,extFS版本1/2/3 ....帶來他們自己的一套規則要注意。)
PHP 7.1支持Windows上的UTF-8文件名(在我更新PHP和Apache之前,我的服務文件中包含了cyrillics的問題),所以如果你能更新PHP,那就是最強大的跨平台這幾天解決了。
我甚至不需要ini_set('mbstring.internal_encoding','UTF-8');
for file_get_contents
可以與非拉丁路徑一起正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.