一尘不染

Windows为什么需要`utf8_decode`文件名才能使`file_get_contents`工作?

linux

如果$filename包含变音符号(ä,ö,ü)file_get_contents($filename)在我的Windows操作系统上不起作用。通过反复试验,我发现需要做file_get_contents(utf8_decode($filename))一些工作。

但是,当我将其实时推送到服务器上(猜测它是某种Linux)时,它又返回了一个错误,因此我删除了,utf8_decode然后突然工作正常。

作为一种解决方法(因此,我不需要在每次更改代码时都手动更改此代码),我已经尝试过

(mb_detect_encoding($filename, 'UTF-8', true)) ? utf8_decode$filename) : $filename;

因为这已经反过来解决了相同的问题()也有同样的问题utf8_encode,但是$filename事实证明它在每个(服务器)环境中都是UTF8编码的,所以这是行不通的,因为它总是正确的。

有什么想法如何使它在两个系统上都能工作吗?(请不要“仅迁移到Linux以进行PHP开发”
—我已经拥有Linux,但是出于多种原因,我正在使用Windows的ATM)


编辑:问题也会出现,fopen并且可接受的解决方案也可以工作。


阅读 243

收藏
2020-06-03

共1个答案

一尘不染

最好的方法是检测您是否使用Windows服务器。由此您可以应用正确的命令

if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
    echo 'This is a server using Windows!';
} else {
    echo 'This is a server not using Windows!';
}
2020-06-03