2012-04-04 10 views
3

私はWindows 2003を使ってPHPコードを書いています。私はXAMPP Portable(D:にコピー)を使用します。問題:私は(ブラウザで)スクリプトを呼び出すときWindowsでUnicode文字を含むディレクトリを一覧表示する

$path = 'D:\ebooks'; 
$all_file = scandir($path); 
foreach ($all_file as $file) { 
    if (is_dir("$path/$file") && $file != '.' && $file != '..') { 
    echo $file . "<br />\n"; 
    } 
} 

、私は(D内:\電子ブック)の任意のディレクトリを見ていないUnicode文字を含む(私はベトナム語、日本語、中国語、チェコ語でテスト済み) 。

しかし、私はis_dir("$path/$file")を削除した場合、ディレクトリは多くの奇妙な文字や多くの???文字で表示されます。

どうすれば問題を解決できますか?

+0

「ユニコード名」とはどういう意味ですか? Ôやüのような特殊文字を意味しますか? –

+0

"多くの変な文字"の部分は、おそらくブラウザ出力のエンコーディングに関係しています。 – cmbuckley

答えて

6

残念ながら、WindowsファイルシステムへのPHPアクセスに関連するバグはたくさんあります。 Windowsはファイル名をUTF-16として保存しますが、PHPの内部構造は古いANSI APIを使用します。だから、アスキー範囲のファイル名だけを使ったり、別のオペレーティングシステムに切り替えるのが最善です。

+2

+1は '別のオペレーティングシステムへの切り替え'のためのものです:-) – cmbuckley

+1

@cbuckley:通常、私は人々にそれを言わせませんが、この場合はWindows上のPHPが本当におかしいファイルシステムをサポートしているということだけです。 – Evert

+0

私はこの問題をLinuxのPHP 7.1で持っています。リンクを確認してください:https://bugs.php.net/bug.php?id=74958 – user3770797

0

これはチェコに役立つかもしれませんが、それはCJKに役立つことはありません(それでも自分自身を探しています)。 バグの「理由」:UTF-8は、Windowsの文字セットにマッピング可能であればOKです。

PHPは、このことについて不快に明確である:«PHP PHP6まで、Unicodeの操作をサポートしていません»Unicodeのファイル名

http://bugs.php.net/bug.php?id=34574

をサポートしていません)

SCANDIR()とのreaddir(

2005年9月に書かれている。

また、システム( 'dir/X')を使用してdos short name equivalentを取得し、短い名前と長い名前の結果を解析してそこから作業することもできます。短い名前で実際にアクセスする(stat、タイムスタンプ、ファイルオープンのための)長い名前を表示してください...

関連する問題