print_r()正确显示中文字符,但一旦将其写入文件,我尝试在记事本,Wordpad和Microsoft Word中打开它,它显示为美元共付é¡Â計劃
print_r($contents);
exit;
if (file_put_contents($this->outPath.$dataFile, $contents) === false) {
$this->_throwError('Error: Unable to write data file: "'.$this->outPath.$dataFile.'"');
}
我也没试过这个尝试过:
$handle = fopen($this->outPath.$dataFile, "w+b"); //binary mode prevents any conversion
fwrite($handle, $contents);
fclose($handle);
该文本是有效的UTF-8所以我不确定可能是什么问题
答案 0 :(得分:1)
简单:记事本,写字板和Word都是微软的产品,臭名昭着的编码期望UTF-8编码的文件以BOM开头。如果您不包含BOM,则它们无法正确识别编码并错误解释文件。
通常不建议将BOM添加到UTF-8编码文件,只有Microsoft Universe似乎需要/更喜欢它。您需要确定哪个更糟糕:可能通过包含BOM或者以某种方式在Word / Note(-pad)中使用正确的编码手动打开文件来引入问题。
PHP中的BOM就是这样:
$bom = "\xEF\xBB\xBF";
将其添加到您的文件中。