PHP 中存在一个错误,它会在上传时破坏文件名 - 请参阅http://bugs.php.net/bug.php?id=47096。因此,我使用一个函数将文件名转换为正确的 UTF8。
功能的核心是:
if ( 'WIN' == substr( PHP_OS, 0, 3 ) ) {
$codepage = 'Windows-' . trim( strstr( setlocale( LC_CTYPE, 0 ), '.' ), '.' );
if ( function_exists( 'iconv' ) ) {
$filename = iconv( 'UTF-8', $codepage, $filename );
} elseif ( function_exists( 'mb_convert_encoding' ) ) {
$filename = mb_convert_encoding( $filename, 'UTF-8', $codepage );
}
}
这适用于较旧的 PHP 版本(<5.2)。但是对于最近的 PHP 版本,该命令
setlocale( LC_CTYPE, 0 )
返回 'C' - 这显然不是 Windows 代码页,因此转换失败。
是否有可靠或替代方法来检索 PHP 中的当前 Windows 代码页?