【问题标题】:get file name with diacritic PHP使用变音符号 PHP 获取文件名
【发布时间】:2014-03-22 14:07:21
【问题描述】:

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');

但没有变化。

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

【问题讨论】:

  • 它可以在 localhost 上运行,但不能在 hostin 上运行,具有相同的数据、相同的文件、相同的文件名,......是因为服务器配置的原因吗?

标签: php encoding filenames diacritics


【解决方案1】:

您尝试将 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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-22
    • 2017-04-30
    • 2013-01-11
    • 2020-12-08
    • 1970-01-01
    • 2020-04-30
    • 2011-08-13
    • 2018-03-09
    相关资源
    最近更新 更多