PHP: How to create a file encoded as “UTF-8 without BOM”
据我所知,大多数人都知道我们对文件使用以下编码:
- 美标
- UTF-8
您可以通过在文件的开头添加三个字符来识别UTF-8,但是您知道这些字符在PHP语言中造成了一些麻烦
所以我们用
- 不带BOM的UTF-8(代替UTF-8)
这是我的问题:
我们如何使用frwite()或任何其他函数(无关紧要)编写编码为(UTF-8,而没有BOM的)新文件(使用PHP)
(我不是在询问编辑器设置>我是在询问使用php函数创建文件)
恐怕您在问题中误用了UTF-8和ANSI。
UTF-8不需要在开始时具有BOM。没有像"没有BOM的UTF-8"这样的编码。只有" UTF-8"。我已经处理了数百万个(当然,成千上万个)UTF-8文件,而且从未在开始时遇到过BOM。
根据Unicode标准,在UTF-8中既不需要也不建议BOM:
2.6 Encoding Schemes
Use of a BOM is neither required nor recommended for UTF-8, but may be encounter in contexts where UTF-8 data is converted from other encoding forms that use a BOM or where the BOM is used as a UTF-8 signature. See the"Byte Order Mark" subsection in Section 16.8, Specials, for more information.
另外,没有" ANSI"这样的编码!
IANA为字符集名称提供的与" ANSI"最接近的是" ANSI_X3.4-1968"和" ANSI_X3.4-1986",它们都是" US-ASCII"(首选的MIME名称)的旧别名。 ),即128个代码点的7位编码。没有其他官方字符集名称的名称中包含" ANSI"。
我不确定您在什么环境下运行,但这似乎使您陷入了一些非标准的命名,期望和标准。
可能是Windows吗? ?
编辑:刚刚找到有关这个匿名来源的答案。
只需在
1 2 3 4 5 6 7 8 |
如果它是"无BOM",则它只是文件中的普通字节。
它们都是数字,从0到255,或从0x00到0xFF,作为文件中的字节序列。您如何解释它们取决于您或程序。
我找到了一个解决方案,您可以打开/创建文件,并在文件开头使用此文件签名以将其设置为UTF8:
我已经对此进行了探索,效果很好!
我在这里找到