簡體   English   中英

如何在php中檢測操作系統編碼?

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

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