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

时间:2010-10-30 13:17:40

标签: php unicode utf-8 byte-order-mark

正如我猜,大多数人都知道我们对文件进行了以下编码:

  • ANSI
  • UTF-8

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

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

这是我的问题: 我们如何使用frwite()或任何其他函数(无关紧要)编写(UTF-8无BOM)编码的新文件(使用PHP)

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

4 个答案:

答案 0 :(得分:2)

我担心你在问题中误传了UTF-8和ANSI。

UTF-8 要求在开始时有BOM。没有“UTF-8无BOM”编码这样的编码。只有“UTF-8”。我已经处理了数百万(当然,数十万)的UTF-8文件,并且从一开始就没有遇到过BOM。

根据the Unicode standard,在UTF-8中,物料清单既不需要也不推荐

  

2.6编码方案

     

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

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

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

我不确定您正在运营的环境,但它似乎已经导致您进入一些非标准的命名,期望和标准。

它可能是...... Windows™? ☹

编辑:刚刚找到this answer关于这个错误的来源。

答案 1 :(得分: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);    

答案 2 :(得分:-1)

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

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

答案 3 :(得分:-3)

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

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

我已经探究过这个并且效果很好!

我发现它here

相关问题