Charset and filenames
| From: | Gustavo Lopes | Date: | Sun, 27 Feb 2005 16:04:18 +0000 |
| Subject: | Charset and filenames | ||
| Groups: | php.general | ||
| Request: | Send a blank email to php-general+get-209541@lists.php.net to get a copy of this message | ||
Hi
I'm building a script that makes a list of files available in a directory
(PHP 4.3.10, Apache 2.0.53, windows, NTFS file system). The XHTML is served
as ISO-8859-1. However, I'm having trouble in generating correct links for
files with accents, etc.
The problem is rawurlencode() appears to convert strings by translating
possible url unsafe characters into the corresponding %xx where xx is the
due hexadecimal number in a specific charset (US-ASCII I think).
Let's say there's a file called:
Anatomia de superfície do tórax.pdf
This file is rawurlencode()'d into:
Anatomia%20de%20superf%EDcie%20do%20t%F3rax.pdf
However, apache rejects this filename, returning a 403 (!) error. In fact,
the simple ocurrence of, for instance, '%F3' in a url triggers this
response.
What in fact works (and Apache uses in its mod_autoindex listings) is:
Anatomia%20de%20superf%c3%adcie%20do%20t%c3%b3rax.pdf
Which represents the encoding in UTF-8 (?).
One partial solution would be not to touch the filename and leave the
encoding to the browsers, which works with IE6 (which leaves the filename
untouched, apart from the spaces, which are transformed into %20 - apache
accepts) and Opera7.54 (which surprisingly does the correct encoding), but
not with Firefox, which performs the same transformation as rawurlencode().
What I need is a function that does the correct enconding, and - since once
finished I shall move the script to another server - in case there be any
platform specific issues, a solution that is as universal as possible.
Thanks in advance
Gustavo Lopes