5

正如我猜想的那样,你们中的大多数人都知道我们对文件有以下编码:

  • ANSI
  • UTF-8

UTF-8 是通过在文件开头添加三个字符来识别的,但是这些字符会在 PHP 语言中引起一些麻烦,如您所知所以我们使用

  • 没有 BOM 的 UTF-8(而不是 UTF-8)

这是我的问题:我们如何使用 frwite() 或任何其他函数(没关系)编写一个编码为(UTF-8 without BOM)的新文件(使用 PHP)

(我不是在询问编辑器设置>我是在询问使用 php 函数创建文件)

4

4 回答 4

2

恐怕您在问题中歪曲了 UTF-8 和 ANSI。

UTF-8的开头不需要有 BOM 没有像“UTF-8 without BOM”这样的编码。只有“UTF-8”。我已经处理了数百万(当然,当然是数十万)UTF-8 文件,并且在开始时从未遇到过 BOM。

根据Unicode 标准,在 UTF-8中既不需要也不推荐使用 BOM :

2.6 编码方案

UTF-8 既不需要也不推荐使用 BOM,但在 UTF-8 数据从使用 BOM 的其他编码形式转换或 BOM 用作 UTF-8 签名的情况下可能会遇到。有关详细信息,请参阅第 16.8 节,特价中的“字节顺序标记”小节。

此外,没有像“ANSI”这样的编码!

IANA 提供的最接近“ANSI”的字符集名称是“ANSI_X3.4-1968”和“ANSI_X3.4-1986”,它们都是“US-ASCII”(首选 MIME 名称)的旧别名),128 个代码点的 7 位编码。没有其他官方字符集名称在其名称中包含“ANSI”。

我不确定你在什么环境下运行,但它似乎让你陷入了一些非常不标准的命名、期望和标准。

可能是……Windows™?☹</p>

编辑:刚刚找到关于这个异名来源的答案

于 2010-10-31T16:01:29.973 回答
0

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

/*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);    
于 2015-06-29T04:31:26.063 回答
-1

如果它是“没有 BOM”,那么它只是文件中的普通字节。

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

于 2010-10-30T13:41:34.057 回答
-3

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

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

我已经对此进行了调查并且效果很好!

我在这里找到了

于 2012-04-20T17:33:46.413 回答