我有一个 unicode 字符串通过 HTTP Post 接收或从数据库中获取(无关紧要)
在 PHP 中,我使用“mb_detect_encoding”检查了字符串的编码,结果得到了 UTF-8。
因此字符串是 Unicode 格式的。
但是我如何使用正确的编码将字符串从 php 写入输出文件
$fd = fopen('myfile.php', "wb");
fwrite($fd, $msg."\n");
我看到的是 "टेसà¥à¤Ÿ"而不是实际的字符串 टेस्ट्
将“垃圾”粘贴到 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);
}
最佳答案
当您写入文件时,PHP 不会更改字符串的编码或对它做任何事情。它只是将字符串的字节(PHP 字符串实际上是字节数组)转储到文件 period.如果您实际接收到的字符串为 UTF-8,并且除了将其写入文件外不对其进行任何操作,则文件的内容将采用 UTF-8 编码。您的问题很可能是您用来查看文件的任何应用程序都没有正确读取它作为 UTF-8 编码。
BOM 解决方案不一定是最好的。 UTF-8 不需要 BOM,许多应用程序都存在问题。它只会帮助那些无法(太愚蠢) 的应用程序检测到文件是UTF-8 编码的。更好的解决方案可能是简单地明确告诉有问题的应用程序它需要在打开文件时将文件视为 UTF-8 编码。或者使用更好的应用程序。
https://stackoverflow.com/questions/9835403/