下面是文件名的一些示例:如何在PHP中对多字节文件名进行编码并在JavaScript中对它们进行解码?
漢語.jpg (Chinese)
Федерация.jpg (Russian)
AbÇöişÜĞ.jpg (Turkish, ISO-8859-9)
...
我已经试过rawurlencode(mb_convert_encoding($file, "UTF-8", mb_detect_encoding($file)))
但这不能正常工作,如打印%3F(普通问号)所有的中国和俄罗斯的字符和所有土耳其字符被删除。
我在Windows,PHP 5.3上测试。
我唯一找到的解决方案是明确输入编码:rawurlencode(mb_convert_encoding($file, "UTF-8", "ISO-8859-9"))
这只适用于土耳其字符。
顺便说一句,mb_detect_encoding($file)
总是返回上述文件的“UTF-8”。
编辑:
后我跑了下面的代码,我认为mb_convert_encoding()
并不能解决我的问题:
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator("mp", FilesystemIterator::UNIX_PATHS));
$iterator = new RegexIterator($iterator, '/^.+\.(gif|jpg|jpeg|png)$/i', RegexIterator::GET_MATCH);
foreach ($iterator as $file)
{
foreach (mb_list_encodings() as $encoding)
var_dump(rawurlencode(mb_convert_encoding($file[0], "UTF-8", $encoding)) . " : " . $encoding);
}
我想这是一些关于编码,但我不知道该怎么办。
mb_detect_encoding()不是无所不知的,并且会经常失败,这是因为几乎不可能确定一段文本使用什么编码。 – 2012-04-05 15:05:12