PHP将文件保存为UTF-8而不使用BOM

时间:2018-01-04 16:48:46

标签: php encoding utf-8 ascii

经过几个小时的搜索,我找不到以强制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?

1 个答案:

答案 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'));