关于Unicode:PHP:如何创建编码为“无BOM的UTF-8”的文件

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吗? ?

编辑:刚刚找到有关这个匿名来源的答案。


只需在PhP中创建一个文件并添加普通文本即可。这个对我有用。

1
2
3
4
5
6
7
8
/*creating the page account.php*/

$archivo="account.php";

$myFile ="$archivo";
$fh = fopen($myFile,"wb") or die("can't open file");
fwrite($fh,"$archivo");//In this case I am writing the name of the file inside of it.
fclose($fh);


如果它是"无BOM",则它只是文件中的普通字节。

它们都是数字,从0到255,或从0x00到0xFF,作为文件中的字节序列。您如何解释它们取决于您或程序。


我找到了一个解决方案,您可以打开/创建文件,并在文件开头使用此文件签名以将其设置为UTF8:

1
2
$fp = fopen("filename.ext","wb");
fwrite($fp,pack("CCC",0xef,0xbb,0xbf));

我已经对此进行了探索,效果很好!

我在这里找到