如何列出包含特殊(挪威)字符的文件

时间:2012-02-29 20:47:51

标签: php file character-encoding

我正在做一个简单的(我认为)文件目录列表,如下所示:

$files = scandir(DOCROOT.'files');

foreach($files as $file)
{
    echo '  <li>'.$file.PHP_EOL;
}

问题是这些文件包含挪威字符(æ,ø,å),它们由于某种原因而出现问号。这是为什么?

我可以通过这样做来明确修复(?)它,然后再回复它:

$file = mb_convert_encoding($file, 'UTF-8', 'pass');

但是对我来说没什么意义有帮助,因为传递应该意味着没有执行字符编码转换,根据文档... * confused * < / p>


以下是一个示例:http://random.geekality.net/files/index.php

1 个答案:

答案 0 :(得分:1)

文件名的编码似乎是ISO Latin 1,但默认情况下使用UTF-8解释页面。字符不是&#34;问号&#34;,而是Unicode替换字符(�)。这意味着尝试将字节流解释为UTF-8的浏览器在UTF-8中遇到无效的字节,并在该点插入字符。将您的浏览器切换到ISO Latin 1并查看差异(查看&gt;编码&gt; ...)。

因此,如果您将页面指定为UTF-8编码,那么您需要做的是将字符串从ISO Latin 1转换为UTF-8。使用mb_convert_encoding($file, 'UTF-8', 'ISO-8859-1')来执行此操作。

如果您将$from编码指定为pass我只能猜测,为什么会有效。你告诉mb_convert_encoding的是pass转换为UTF-8。我想这会使mb_convert_encodingmb_internal_encoding值作为$from编码,恰好是ISO Latin 1.我认为它在使用{@ 1}}时相当于'auto'作为$from参数。