PHPのbasename関数が日本語に対応していない…
開発元でもバグと認めているようで、自己解決以外に方法はなさそう。
$filename = basename('c:/some folder/新規テキスト ドキュメント.txt');
この関数は、'V規テキスト ドキュメント.txt' を返す。
自己解決方法として、
$arrBasename = explode('/', 'c:/some folder/新規テキスト ドキュメント.txt');
$filename = $arrBasename[count($arrBasename)-1];
開発元がこのバグを修正しないと言うことは、日本語対応してしまうと、他の言語で影響があると言うことなのだろう。 つまり、将来に渡って baename 関数が使えないか、他の言語の互換性問題を発生させてまでも日本のユーザに便宜を図ってくれるのか… と言うところだろうか。
開発元は、「Won't fix in PHP 5. This will be implemented for PHP 6.」と言っているので、6で直るのかなぁ。
余談
この現象が起きた時に、これは文字のエンコード問題だ(Shift JISの互換性問題だ)と思い、次のようなムチャクチャなコードを試してみた。
$filename = mb_convert_encoding(basename(mb_convert_encoding('c:/some folder/新規テキスト ドキュメント.txt', 'UTF-8', 'auto')), 'SJIS', 'UTF-8');
その結果は、$filename = ' ドキュメント.txt' orz ...