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

问题描述 投票:0回答:1

经过几个小时的搜索,我找不到以强制UTF-8编码保存文件的解决方案。如果字符串中只有UTF-8可用的字符,则该文件成功保存为UTF-8,但如果有ASCII和UTF-8可用的字符,则该文件保存为ASCII

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);

由于字符&是ASCII中的单个字节,而双字节字符是UTF-8,因此文件的接收者无法读取文件。有没有一个解决方案强制文件到UTF-8没有PHP的BOM?

php encoding utf-8 ascii
1个回答
-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'));
© www.soinside.com 2019 - 2024. All rights reserved.