[英]How to detect operating system encoding in php?
我想檢測文件系統編碼的操作系統是默認的,比如不同語言版本的Windows操作系統,它會使用不同的編碼(iso-8859-1,ms950,big5,gb2312..etc)那么如何檢測不同的操作系統在PHP編碼? 任何想法? 謝謝。
Linux沒有編碼,文件名存儲在二進制字符串中,可能包含任何內容。 解釋特定編碼中的問題取決於應用程序。 大多數情況下,這只是UTF-8。 但是,這取決於文件名的“查看者”。
在OS / X上訪問文件系統將使用UTF-8規范化表單D.
不幸的是,我無法回答它在Windows上的內容。 在內部,它存儲為UTF-16的變體,但在我的機器上通過PHP訪問它,api是CP-1252,但是,這取決於語言。
嘗試
print_r( explode(";", setlocale(LC_ALL, 0)));
然后需要將代碼頁轉換為編碼
文件系統不具備種編碼的,每個文件可以使用編碼的不同種類,因此,所有你需要的是找到一個合適的編碼處理的文件名字符串。
要檢測文件名的編碼,您可以“嘗試”將該文件名轉換為所有已知的編碼列表,並將原始文件名字符串與轉換后的字符串進行比較,如果等於,則表示您正在查找該編碼。
將字符串轉換為我使用的一種編碼方式 。 所以要做這項工作,您可以看到以下代碼作為示例。
function getActuallEncoding($text) {
$encodingList = array('UTF-8', 'gb2312', 'ISO-8859-1', 'big5'); // Add more if you need.
foreach($encodingList as $oneEncode) {
$oneResult = iconv(mb_detect_encoding($text, mb_detect_order(), true), $oneEncode, $text);
if(md5($oneResult) == md5($text)) return $oneEncode;
}
return "UNKNOWN"; // This return value may cause problem, just let you know.
}
希望有所幫助。
為什么不使用mb_detect_encoding() ?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.