经过几个小时的搜索,我找不到以强制UTF-8编码保存文件的解决方案。如果字符串中只有UTF-8中有任何字符,则该文件成功保存为UTF-8,但如果有ASCII和UTF-8可用的字符,则该文件将保存为ASCII < / p>
file_put_contents("test1.xml", "test"); // Saved as ASCII
file_put_contents("test2.xml", "test&"); // Saved as ASCII
file_put_contents("test3.xml", "tëst&"); // Saved as UTF-8
我可以添加BOM来强制使用UTF-8文件,但文档的接收者不接受BOM:
file_put_contents("utf8-force.xml", "\xEF\xBB\xBFtest&"); // Stored as UTF-8 because of the BOM
我确实用一个简单的代码检查了编码:
exec('file -I '.$file, $output);
print_r($output);
因为角色&amp;是ASCII中的单个字节,双字节字符是UTF-8,文件的接收者无法读取文件。 有没有一个解决办法强制文件到UTF-8而没有PHP的BOM?
答案 0 :(得分:-2)
file_put_contents不会转换编码 您必须使用mb_convert_encoding
明确转换字符串试试这个:
$data = 'test';
$data = mb_convert_encoding($data, 'UTF-8', 'OLD-ENCODING');
file_put_contents("test1.xml", $data);
或者您可以尝试使用stream_filer
$data = 'test';
$file = fopen('test.xml', 'r');
stream_filter_append($file, 'convert.iconv.UTF-8/OLD-ENCODING');
stream_copy_to_stream($file, fopen($data, 'w'));