正如我猜想的那样,你们中的大多数人都知道我们对文件有以下编码:
- ANSI
- UTF-8
UTF-8 是通过在文件开头添加三个字符来识别的,但是这些字符会在 PHP 语言中引起一些麻烦,如您所知所以我们使用
- 没有 BOM 的 UTF-8(而不是 UTF-8)
这是我的问题:我们如何使用 frwite() 或任何其他函数(没关系)编写一个编码为(UTF-8 without BOM)的新文件(使用 PHP)
(我不是在询问编辑器设置>我是在询问使用 php 函数创建文件)
正如我猜想的那样,你们中的大多数人都知道我们对文件有以下编码:
UTF-8 是通过在文件开头添加三个字符来识别的,但是这些字符会在 PHP 语言中引起一些麻烦,如您所知所以我们使用
这是我的问题:我们如何使用 frwite() 或任何其他函数(没关系)编写一个编码为(UTF-8 without BOM)的新文件(使用 PHP)
(我不是在询问编辑器设置>我是在询问使用 php 函数创建文件)
恐怕您在问题中歪曲了 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>
编辑:刚刚找到关于这个异名来源的答案。
只需在其中创建一个文件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);
如果它是“没有 BOM”,那么它只是文件中的普通字节。
它们都是数字,从 0 到 255,或 0x00 到 0xFF,作为文件中的字节序列。您如何解释它们将取决于您或程序。
我找到了一个解决方案,您可以打开/创建文件并使用它在开头写入签名,以便将其设置为 UTF8:
$fp = fopen("filename.ext","wb");
fwrite($fp,pack("CCC",0xef,0xbb,0xbf));
我已经对此进行了调查并且效果很好!
我在这里找到了