アップロード時にファイル名を台無しにするバグが 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 コード ページを取得するための信頼できる方法または代替方法はありますか?