一尘不染

PHP文件中的UTF-8 BOM签名

php

我在写一些注释过的PHP类,但偶然发现了一个问题。我的名字(用于@author标记)以一个ș(以UTF-8字符开头,…和一个奇怪的名字,我知道)结尾。

即使我将文件另存为UTF-8,也有一些朋友报告说他们看到这个字符完全弄乱了(È™)。通过添加BOM表签名可以解决此问题。但是那件事让我有些烦恼,因为除了我在Wikipedia上以及关于SO的其他一些类似问题上所了解的之外,我对此并不了解。

我知道它在文件的开头添加了一些内容,据我了解还不错,但是我很担心,因为我所读到的唯一有问题的场景都涉及到PHP文件。并且由于我正在编写PHP类以共享它们,因此100%兼容比在注释中添加我的名字更重要。

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


阅读 249

收藏
2020-05-26

共1个答案

一尘不染

实际上,BOM是发送到浏览器的实际数据。浏览器将愉快地忽略它,但是仍然不能发送标头。

我相信问题确实出在您和您朋友的编辑器设置上。没有BOM表,朋友的编辑器可能不会自动将文件识别为UTF-8。他可以尝试设置他的编辑器,以便该编辑器 期望
文件位于UTF-8中(如果您使用NetBeans这样的真实IDE,那么甚至可以将其设置为项目设置,并随代码一起传输)。 。

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

<?php //Úτƒ-8 encoded

也许启发式就能做到。可能有更好的东西放在那里,您可以用google搜索常见的哪种编码检测启发式方法,或尝试一下:-)

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

哦,等等,我读错了最后一部分:为了将代码传播到任何地方,我想您最安全的做法是仅使所有文件仅包含较低的7位字符(即纯ASCII),或者仅接受具有古老编辑器的某些人看到你的名字写得好笑。没有故障安全方法。由于标头已经发送,物料清单绝对不好。另一方面,只要您仅在注释中放入UTF-8字符,这样,一些编辑人员就会误解编码的唯一影响就是奇怪的字符。我会为您正确拼写您的名字并添加针对启发式的注释,以便大多数编辑者都可以使用它,但是总会有人看到假字符。

2020-05-26