簡體   English   中英

PHP使用非拉丁文件名檢測文件系統編碼/保存文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM