写的Unicode字符到PHP文件 - 而不是重复

问题描述:

我从一个数据库获得通过HTTP发布或获取一个unicode字符串(无所谓)写的Unicode字符到PHP文件 - 而不是重复

在PHP我使用“mb_detect_encoding”检查字符串的编码结果得到了UTF-8。

因此,字符串是Unicode的。

但我怎么写的字符串从PHP与正确的编码

$fd = fopen('myfile.php', "wb"); 
    fwrite($fd, $msg."\n"); 

我看到的是“टेसà¥à¤Ÿ”,而不是一个输出文件实际的字符串,它是 电话

将'垃圾'粘贴到记事本++,然后从菜单选项'编码UTF-8'将显示正确的文本。

编辑 * SOLUTION *

对不起张贴的问题,并找出自己的答案。

我找到了解决方案可从以下网站 http://www.codingforums.com/showthread.php?t=129270

function writeUTF8File($filename,$content) { 
     $f=fopen($filename,"w"); 
     # Now UTF-8 - Add byte order mark 
     fwrite($f, pack("CCC",0xef,0xbb,0xbf)); 
     fwrite($f,$content); 
     fclose($f); 
} 

您必须指定的mb_detect_encodingstrict参数,否则你会得到许多假阳性。

此外,虽然输出可能是UTF-8,但您必须指定正确的标题(content-encoding)和/或charset元标记(如果它是HTML)。

+0

输出是一个PHP文件的解决方案。我如何为php文件指定标头? – Anand 2012-03-23 08:03:57

+1

对不起,我误解了。关于您自己发布的解决方案:请注意,当您使用字节顺序标记(BOM)启动PHP文件时,包含PHP文件时也会输出此BOM。这可能会导致在使用此生成的PHP文件呈现的页面的开头(或某处中间)输出不需要的BOM。 – GolezTrol 2012-03-23 10:35:06

当您写入文件时,PHP不会更改字符串的编码或对其执行任何操作。它只是将字符串的字节(PHP字符串实际上是字节数组)存储到文件period中。如果您实际接收到的字符串为UTF-8,除非将其写入文件,否则不要对其执行任何操作,该文件的内容将采用UTF-8编码。您的问题很可能是您使用的任何应用程序视图该文件没有正确地将其读为UTF-8编码。


BOM解决方案不一定是最好的。对于UTF-8,BOM不是必需的,许多应用程序都有问题。它只能帮助那些不能用 (太愚蠢) 来检测文件是UTF-8编码的应用程序。更好的解决方案可能是简单地明确告诉相关应用程序,在打开文件时需要将文件视为UTF-8编码。或者使用更好的应用程序。

对不起,我发布了这个问题并找出了答案。

我发现以下站点here

function writeUTF8File($filename,$content) { 
     $f=fopen($filename,"w"); 
     # Now UTF-8 - Add byte order mark 
     fwrite($f, pack("CCC",0xef,0xbb,0xbf)); 
     fwrite($f,$content); 
     fclose($f); 
} 
+0

“UTF-8 BOM”是假的;没有字节顺序来标记UTF-8。不幸的是,来自Microsoft Land的许多工具默认将UTF-8输出中的仿BOM包括在内,并且在某些情况下不能读取UTF-8输入。您的原始文件已经是有效且正确的UTF-8;如果Notepad ++没有默认将文件识别为UTF-8,则应该更改该设置。 – bobince 2012-03-23 15:30:25