我有通过HTTP Post接收的unicode字符串或从DB获取的unicode字符串(无关紧要)
在PHP中,我使用“mb_detect_encoding”检查了字符串的编码,并得到了UTF-8。
因此,字符串是Unicode格式。但是如何将php中的字符串写入具有正确编码的输出文件
$fd = fopen('myfile.php', "wb");
fwrite($fd, $msg."\n");
我看到的是“टेसà¥à¤”而不是实际的字符串是 टेस्ट्
将'junk'粘贴到Notepad ++中,然后从菜单选项中“执行'编码UTF-8'将显示正确的文本。
修改 * 解 *
很抱歉发布问题并自己找出答案。
我在以下网站找到了解决方案 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);
}
答案 0 :(得分:2)
当您写入文件时,PHP不会更改字符串的编码或对其执行任何操作。它只是将字符串的字节(PHP字符串实际上是字节数组)转储到文件中。如果您实际收到字符串为UTF-8并且除了将其写入文件之外不对其执行任何操作,则文件的内容将采用UTF-8编码。您的问题很可能是您用于查看文件的任何应用程序无法正确读取它为UTF-8编码。
该BOM解决方案不一定是最好的。 UTF-8不需要BOM,许多应用程序都有问题。它只能帮助那些无法(太愚蠢)的应用程序检测到文件是UTF-8编码的。更好的解决方案可能是简单地明确告诉相关应用程序在打开文件时需要将文件视为UTF-8编码。或者使用更好的应用程序。
答案 1 :(得分:0)
您必须指定strict
的{{1}}参数,否则会产生许多误报。
此外,虽然输出可能是UTF-8,但您必须指定正确的标题(content-encoding)和/或charset元标记(如果它是HTML)。
答案 2 :(得分:0)
很抱歉发布问题并自己找出答案。
我在以下网站找到了解决方案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);
}