Bug #37738 [Com]: basename does not work with Japanese

From: Date: Sun, 15 Sep 2013 10:20:38 +0000
Subject: Bug #37738 [Com]: basename does not work with Japanese
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-181588@lists.php.net to get a copy of this message
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] cataphract@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] chx@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] derick@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


Thread (7 messages)

« previous php.bugs (#181588) next »