0

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 代码页?

4

1 回答 1

4

有趣的是它适用于旧版本的 PHP。如果没有显式设置语言环境,则返回值C表示尚未设置语言环境并且正在使用默认值。

您可以调用setlocale( LC_CTYPE, '' )which 将强制将语言环境显式设置为默认系统语言环境。使用空字符串调用方法的返回值应该是新设置的语言环境(而不是使用 0 调用并期望语言环境被查询并返回给您而不修改)。

空字符串是一种将当前语言环境显式设置为默认值的方法,而不是仅仅查询它。

于 2012-12-09T14:50:14.457 回答