当前位置: 首页 > 面试题库 >

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

甄越
2023-03-14
问题内容

如果$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并且可接受的解决方案也可以工作。


问题答案:

最好的方法是检测您是否使用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!';
}


 类似资料:
  • 我的问题是,我的活动中的按钮需要单击两次,以使代码执行用onClick方法编写的代码。当我共享我的活动代码和布局文件代码时。请引导我解决这个问题。 活动(片段) 布局文件 而此片段正在另一个主要活动中初始化。

  • 问题内容: 我认为这个问题已经存在,但是我找不到。 我不明白,为什么必须要有一个功能接口才能使用lambda。考虑以下示例: 这可以正常工作,但是如果您取消注释行,则不会。为什么?以我的理解,编译器应该能够区分这两种方法,因为它们具有不同的输入参数。为什么我需要一个功能接口并炸毁我的代码? 编辑:链接的重复项没有回答我的问题,因为我在询问不同的方法参数。但是在这里,我得到了一些非常有用的答案,这要

  • 问题内容: 我知道元素上的设置用于使其居中(左右)。但是,我知道该元素及其父元素必须满足某些条件才能使用自动边距,而且我似乎永远无法正确理解魔术。 所以我的问题很简单:为了使孩子左右居中,必须在元素及其父元素上设置哪些CSS属性? 问题答案: 从我的头顶上: 所述元件必须是块级,例如或 元素不能浮动 元素不得具有固定或绝对位置1 超越别人的头: 元素必须具有不为2的 请注意, 所有 这些条件都必须

  • 我试图让VSCode启动并使用TypeScript运行,但收效甚微。 我正在看以下内容: https://code.visualstudio.com/docs/languages/typescript 看起来,一旦安装了编译器VSCode,就应该可以正常工作,但考虑到以下情况: tsconfig.json 包裹json tasks.json 项目 你好世界ts 从终端运行构建任务或tsc会正确指示

  • 为什么 Modal 方法不能获取 context、redux、的内容和 ConfigProvider locale/prefixCls/theme 等配置? 直接调用 Modal 方法,antd 会通过 ReactDOM.render 动态创建新的 React 实体。其 context 与当前代码所在 context 并不相同,因而无法获取 context 信息。 当你需要 context 信息(

  • 问题内容: 我越来越。我提到了这个问题,它解决了我的问题。第一个答案是 我的问题是为什么我们需要在同一个对象广告上进行同步? 据我的理解,当我们说 我们锁定了对象someObject,然后对其调用了wait()。 现在,另一个线程如何才能锁定同一对象以在其上调用notify()? 我想念什么? 问题答案: 为什么也需要锁? 想象一下这种情况: 现在想象一下其他地方没有任何锁定: 乍一看,整个声音总