PHP:使用(或不使用)'utf8_encode'并将BOM设置为\ xEF \ xBB \ xBF

时间:2012-09-26 10:30:16

标签: php utf-8 fopen fwrite

使用以下代码时:

$myString = 'some contents';    
$fh=fopen('newfile.txt',"w");
fwrite($fh, "\xEF\xBB\xBF" . $myString);

使用PHP函数首先对文本进行编码是否有任何意义(示例中为$ myString),例如比如运行utf8_encode($myString);或类似的iconv()命令?

假设BOM \xEF\xBB\xBF首先输入到文件中,并且UTF8几乎代表了世界上的所有角色,我没有看到以这种方式创建文件的任何潜在失败情况。换句话说,我没有看到任何主要文本编辑器无法核心地解释新创建的文件,按预期显示所有字符的情况。即使$myString是来自HTML表单的PHP $_POST变量,也是如此。我是对的吗?

2 个答案:

答案 0 :(得分:1)

如果您的源文件是UTF-8编码的,那么字符串$myString也是UTF-8编码的,您无需转换它。否则,您需要先使用iconv()转换编码,然后再将其写入文件。

注意utf8_encode()用于将ISO-8859-1字符串编码为UTF-8。

答案 1 :(得分:0)

请注意,utf8_encode只会转换ISO-8859-1个编码字符串。

通常,鉴于PHP仅支持256 char字符集,在将其写入UTF-8之前,您需要对包含非ASCII字符的任何字符串进行utf-8编码。

BOM是可选的(大多数文本文件阅读器现在将扫描文件以进行编码)。

来自Wikipedia

  

Unicode标准允许使用UTF-8,[2]但不需要   或推荐赞成或反对其使用