[英]PHP: How to configure windows shell codepage so that STDOUT of proc_open() does not garble?
[英]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.