用变音PHP获取文件名

时间:2014-03-22 14:07:22

标签: php encoding filenames diacritics

在PHP中有很多关于变音符号/重音符号的主题,但没有一个能解决我的问题。 我有这段代码:

<!DOCTYPE html>
<html lang="sk">
    <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    </head>
    <body>
        <?php
            $items = scandir("test/");
                        echo $items[3];
        ?>
    </body>
</html>

$ items [3]是ľšá.png,但显示:ğšápng

我试过了:

foreach(mb_list_encodings() as $chr){
  echo mb_convert_encoding($items[3], 'UTF-8', $chr) ." : ".$chr."<br>"; 
}

但它们都不适合我。 我也试过把这个放在scandir()之前:

mb_internal_encoding('UTF-8');
mb_http_output('UTF-8');
ini_set('default_charset', 'utf-8');

但没有变化。

这很奇怪,因为我的网站在看到问题(今天)之前一直在工作,而且我没有影响任何代码。

1 个答案:

答案 0 :(得分:0)

您尝试将 1字节编码转换为 UTF-8(双字节),但您看到的错误文件名中包含双字符,所以它已经是UTF-8了! 你需要从UTF-8转换它,对我来说它的工作原理如下:

mb_convert_encoding($items[3], "ISO-8859-15", 'UTF-8'); // its to ISO from UTF-8

我个人使用iconv

echo iconv("UTF-8","ISO-8859-15",$items[3]); // its from UTF-8 to ISO

但我认为如果它们中的任何一个确实有效,那就没什么大不同了。

另外,我建议您检查网络服务器上的文件名,如果他们在上传时意外地被转换了。