【发布时间】:2015-11-06 03:26:41
【问题描述】:
美好的一天!
我想我几乎阅读了所有与 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 "with BOM"。
为了解决这个问题,我有两个解决方案,但我不知道如何使它们起作用:
- 创建一个没有 BOM 的 UTF8 编码文件(流,iconv 不是一个选项,因为旧 PHP)
- require_once 删除 BOM 的文件
谁能帮帮我?
请不要建议我生成/存储配置的替代策略。必须这样做。
非常感谢!
【问题讨论】:
-
"\xEF\xBB\xBF"不会改变$phpCommands的编码,只是告诉文件应该被视为UTF-8。所以$phpCommands必须已经用 UTF-8 编码,如果你要删除 BOM,解决方案是一开始就不要添加它。 -
PHP 没有字符编码的概念,它将所有字符串都视为字节数组。如果您的
$phpCommands字符串已经是 UTF-8 编码的文本,则不需要 BOM。如果不是,添加 BOM 不会神奇地做到这一点。 -
感谢您的回复!好吧,如果我尝试: file_put_contents( $folder, utf8_encode($phpCommands) );生成的文件没有编码(至少我可以用 Notepad++ 看到)。虽然我看到添加 BOM 被识别为 UTF-8 @AD7six :我的意思是我必须生成配置文件。有人可能会争辩说我可以将它存储在数据库或其他东西中。