$files = scandir(DOCROOT.'files');
foreach($files as $file)
{
echo ' <li>'.$file.PHP_EOL;
}
问题是文件包含挪威字符(æ,ø,å),并且由于某种原因它们作为问号出现.为什么是这样?
在我回应它之前,我可以通过这样做来解决(?)它:
$file = mb_convert_encoding($file, 'UTF-8', 'pass');
但是对我来说没什么意义有帮助,因为传递应该意味着没有执行字符编码转换,根据文档… * confused *
这是一个例子:http://random.geekality.net/files/index.php
解决方法:
看起来文件名的编码在ISO Latin 1中,但默认情况下使用UTF-8解释页面.字符不是“问号”,而是Unicode替换字符( ).这意味着尝试将字节流解释为UTF-8的浏览器在UTF-8中遇到无效的字节,并在该点插入字符.将浏览器切换到ISO Latin 1并查看差异(查看>编码> …).
因此,如果您将页面指定为UTF-8编码,则需要将字符串从ISO Latin 1转换为UTF-8.使用mb_convert_encoding($file,’UTF-8′,’ISO-8859-1′)来执行此操作.
为什么它如果你指定$from from encoding作为pass我只能猜测它.你告诉mb_convert_encoding的是从pass转换为UTF-8.我想这使得mb_convert_encoding将mb_internal_encoding值作为$from编码,恰好是ISO Latin 1.我认为当用作$from参数时,它相当于’auto’.