繁体   English   中英

如何在 PHP 中检索当前的 Windows 代码页

[英]How to retrieve the current windows codepage in PHP

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

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

您可以调用setlocale( LC_CTYPE, '' ) ,这将强制将区域设置显式设置为默认系统区域设置。 使用空字符串调用该方法的返回值应该是新设置的区域设置(与使用 0 调用并期望区域设置被查询并返回给您而无需修改相反)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM