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

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

$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’.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...