PHP 文件中的 UTF-8 BOM 签名

我正在编写一些注释的PHP类,我偶然发现了一个问题。我的名字(用于@author标签)以(这是UTF-8字符,...还有一个奇怪的名字,我知道)。ș

尽管我将文件保存为UTF-8,但一些朋友报告说他们看到该字符完全混乱()。通过添加 BOM 签名,此问题会消失。但这件事让我有点困扰,因为我对它了解不多,除了我在维基百科上看到的内容和SO上的其他一些类似问题。È™

我知道它在文件开头添加了一些东西,据我所知,它并没有那么糟糕,但我担心,因为我读到的唯一有问题的场景涉及PHP文件。由于我正在编写PHP类来共享它们,因此100%兼容比在评论中包含我的名字更重要。

但是我试图理解其中的含义,我应该不用担心使用它吗?或者是否有可能造成损害的情况?什么时候?


答案 1

实际上,BOM是发送到浏览器的实际数据。浏览器会很乐意忽略它,但您仍然无法发送标头。

我相信问题真的是你和你朋友的编辑器设置。如果没有 BOM 表,您朋友的编辑器可能无法自动将文件识别为 UTF-8。他可以尝试设置他的编辑器,以便编辑器期望文件采用 UTF-8 格式(如果您使用真正的 IDE,如 NetBeans,那么这甚至可以作为一个项目设置,您可以将其与代码一起传输)。

另一种方法是尝试一些技巧:一些编辑器尝试使用一些基于输入文本的启发式方法来确定编码。您可以尝试使用 以下命令启动每个文件

<?php //Úτƒ-8 encoded

也许启发式会得到它。可能有更好的东西可以放在那里,你可以谷歌什么样的编码检测启发式是常见的,或者只是尝试一些:-)

总而言之,我建议只修复编辑器设置。

哦,等等,我误读了最后一部分:为了将代码传播到任何地方,我想你最安全的只是让所有文件只包含较低的7位字符,即普通的ASCII,或者只是接受一些有古代编辑器的人看到你的名字写得很有趣。没有故障安全的方法。BOM肯定是坏的,因为已经发送了标头。另一方面,只要你只把UTF-8字符放在注释中等等,一些编辑器误解编码的唯一影响就是奇怪的字符。我会选择正确拼写你的名字,并添加一个针对启发式的评论,以便大多数编辑都能理解它,但总会有人看到虚假的字符。


答案 2

BOM会导致错误,因此,您不能在PHP文件中使用BOMHeaders already sent


推荐