2011-11-30 76 views
7

我想检测不同语言版本的文件系统的编码为默认值,如Windows OS的操作系统,它会使用不同的编码(ISO-8859-1,MS950,BIG5,gb2312..etc) 所以,我怎么能检测PHP中不同的编码操作系统?任何想法?谢谢。如何在php中检测操作系统编码?

+0

有你在这里检查的其他问题上的SO关于编码识别?看看这一个例子:http://stackoverflow.com/questions/910793/php-detect-encoding-and-make-everything-utf-8或者这一个:http://stackoverflow.com/questions/505562/检测文件编码在PHP –

+0

我不确定文件系统委托编码... mb_list_encodings将返回一个支持的编码列表。 – Incognito

+0

这不是我想要的答案,这是与我的不同的问题 – Jasper

回答

1

Linux没有一个编码,文件名都存储在二进制字符串和可能包含任何数据。解释特定的编码取决于应用程序。大多数情况下,这只会是UTF-8。但是,它取决于文件名的“查看器”。

访问在OS/X的文件系统将使用UTF-8范式D.

不幸的是,我不能回答这是Windows的。在内部,它存储为UTF-16的变体,但是通过我的机器上的PHP访问它,api是CP-1252,但是,这取决于语言。

0

尝试

print_r(explode(";", setlocale(LC_ALL, 0))); 

这时就需要转换的代码页编码

0

文件系统没有一种编码的,每个文件可以使用不同种编码的,所以你需要的是找到一个正确的编码来处理文件名字符串。

要检测文件名的编码,您可以“尝试”将该文件名转换为您已知的所有编码列表,并将原始文件名字符串与转换后的字符串进行比较,如果等于,那么该编码就是您要查找的。

将字符串转换为一个种编码的我用This way。所以要做这个工作,你可以看到下面的例子。

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. 
} 

希望有帮助。