PHP,在需要PHP文件时删除BOM

时间:2015-08-13 08:48:28

标签: php encoding utf-8

美好的一天!

我想我几乎阅读了与PHP和BOM相关的所有问题,但我找不到合适的问题答案。所以我在这里:

我有一个PHP脚本( loader.php ),第一次运行它会生成一个配置文件( _config.php ) 在这个脚本中,我只存储了一些关于第一次调用环境的变量。 如果_config.php文件已经存在,我需要在 loader.php

一切正常但问题是_config.php需要创建为UTF8。 对我来说,唯一的方法是question,而

file_put_contents(
    $folder, 
    "\xEF\xBB\xBF".$phpCommands
);

当然这会增加BOM并且当我第二次调用 loader.php 时使用require函数时我会读取它,最后会产生众所周知的额外空间问题。页。我尝试使用建议的here方法从页面的最终输出中删除它,但它不会影响结果,可能是因为BOM是通过require而不是通过fopen或类似方式插入的。

我所有的PHP脚本都是UTF-8(没有BOM)。 生成的_config.php是UTF-8" BOM"。

要解决这个问题,我有两个解决方案,但我无法弄清楚如何让它们发挥作用:

  1. 创建一个没有BOM的UTF8编码文件(因为旧的PHP,所以不能选择streamv,而是使用iconv)
  2. require_once删除BOM的文件
  3. 有人能帮助我吗?

    请不要建议我生成/存储配置的替代策略。它必须以这种方式完成。

    非常感谢!

1 个答案:

答案 0 :(得分:2)

创建文件时,根本不添加BOM 。它没有任何目的。

最有可能解释你的"它对我有用的唯一方法" 只是一种糟糕的测试方法,不多也不少。意思是,您的文件使用UTF-8创建完全正常,只是您用来确认有缺陷的方法。我在这里猜测你在一些文本编辑器中打开了生成的文件,该编辑器告诉你文件编码是" ANSI"或" ASCII"或者这样。

嗯,纯文本文件不会在任何地方声明其编码。你的文本编辑器只是猜测它的编码。如果文件内容只是简单的英文/ ASCII,则ASCII,ANSI和UTF-8之间没有任何区别。您的文本编辑器只是告诉您一个可能的答案,其中任何答案都同样有效。添加BOM会明确地在编码为UTF-8的文件的开头添加一个提示,编辑器会选择该编码。

这或类似的东西可能是你的整个非问题。