Edit report at https://bugs.php.net/bug.php?id=37738&edit=1
ID: 37738 Comment by: kenji dot uui at gmail dot com Reported by: joey at alegria dot co dot jp Summary: basename does not work with Japanese Status: Not a bug Type: Bug Package: *Directory/Filesystem functions Operating System: Fedora Core 4 PHP Version: 5CVS-2006-06-08 (CVS) Block user comment: N Private report: N New Comment: On PHP 5.5.1 Windows, I got the results below if I put "setlocale(LC_ALL, 'japanese');". The full filename of the romanized file is /myfolder/roman_filename.txt. The basename of the romanized file is roman_filename.txt. The full filename of the Japanese file is /myfolder/æ¥æ¬èªã®ãã¡ã¤ã«å.txt. The basename of the Japanese file is æ¥æ¬èªã®ãã¡ã¤ã«å.txt. Previous Comments: ------------------------------------------------------------------------ [2012-06-06 20:46:30] ion at 66 dot ru we want to use many locales and we don't know locale of filename before user add file. how we can use this filenames without transliteration? ------------------------------------------------------------------------ [2011-04-11 00:19:45] cataphr...@php.net For better or worse, basename is affected by the locale. The encoding used in the filenames must match the set locale. Bogus. ------------------------------------------------------------------------ [2011-04-10 22:23:10] c...@php.net I am reopening this as PHP 6 is not developed any more and the bug is still valid. ------------------------------------------------------------------------ [2006-06-08 06:37:11] der...@php.net Won't fix in PHP 5. This will be implemented for PHP 6. ------------------------------------------------------------------------ [2006-06-08 06:09:54] joey at alegria dot co dot jp Description: ------------ Simply put, basename() does ot work with Japanese filepaths. If the filename is Japanese only the extension part of the filename is returned. So a filename "/folder/t@C¼.txt" resolves to just ".txt". I discovered the problem when performing a basename() on the $_FILES array's 'name' element for uploaded Japanese files, however after testing the bug occurs no matter how you supply the filename. My PHP environment is running with UTF-8 internal encoding. The code snippet below illustrates this perfectly. Reproduce code: --------------- <?php // show normal behavior with roman filename $filename='/myfolder/roman_filename.txt'; echo "The full filename of the romanized file is $filename.\n"; // /myfolder/roman_filename.txt $basename=basename($filename); echo "The basename of the romanized file is $basename.\n"; // /roman_filename.txt // show behavior with Japanese filename $filename='/myfolder/ú{êÌt@C¼.txt'; echo "The full filename of the Japanese file is $filename.\n"; // /myfolder/ú{êÌt@C¼.txt $basename=basename($filename); echo "The basename of the Japanese file is $basename."; // .txt ?> Expected result: ---------------- The full filename of the romanized file is /myfolder/roman_filename.txt. The basename of the romanized file is roman_filename.txt. The full filename of the Japanese file is /myfolder/ú{êÌt@C¼.txt. The basename of the Japanese file is ú{êÌt@C¼.txt. Actual result: -------------- The full filename of the romanized file is /myfolder/roman_filename.txt. The basename of the romanized file is roman_filename.txt. The full filename of the Japanese file is /myfolder/ú{êÌt@C¼.txt. The basename of the Japanese file is .txt. ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=37738&edit=1