Re: reading files with accents in the filename from PHP [message #183108 is a reply to message #183107] |
Wed, 09 October 2013 11:16 |
Erwin Moller
Messages: 228 Registered: September 2010
Karma:
|
Senior Member |
|
|
On 10/9/2013 12:58 PM, Thomas Mlynarczyk wrote:
> Erwin Moller schrieb:
>
>> How can PHP open files on the local filesystem that contain certain
>> characters, like umlauts, accents, etc?
>
> $path = __DIR__ . '\Eugène.txt';
> var_dump( PHP_VERSION, file_exists( $path ) );
>
That didn't help since my files are not stored in working dir.
> Works on my Windows XP, PHP 5.4.8, *if* the PHP file is stored in ANSI
> (="Windows") encoding. Doesn't work if stored in UTF8.
Strange situation.
I changed my PHP-files encoding to UTF-8, but the problem still occurred.
So I suspect it's
> an encoding issue: the accented character "è" is stored as \xE8 in the
> file system, but if your script is UTF8, then your $path will contain
> \xC3\xA8 instead. With an "explicit" $path = __DIR__ . "\Eug\xE8ne.txt"
> it works when the script is UTF8.
>
THAT helped!
I added a replace:
$path = str_replace("è","\xE8",$path);
and now it IS readable from PHP.
Now I wonder if I should make a whole list of such replaces....
Sounds horrid, doesn't it?
But your idea brought me to the following idea:
$path = utf8_decode($path);
Which works flawlessly (on my set of only 13000 filenames)!
So at least I have it fixed for NTFS.
Thanks for pointing my head in the right direction.
Regards,
Erwin Moller
> Greetings,
> Thomas
>
--
"That which can be asserted without evidence, can be dismissed without
evidence."
-- Christopher Hitchens
|
|
|