我正在使用 php fwrite() 创建一个文件,我知道我所有的数据都是 UTF8 格式(我已经对此进行了广泛的测试 - 当将数据保存到数据库并在正常网页上输出时,一切正常并报告为 utf8。) , 但我被告知我正在输出的文件包含非 utf8 数据 :( bash (CentOS) 中是否有检查文件格式的命令?
当使用 vim 时,它显示的内容为:
Donâ~@~Yt do anything .... Itâ~@~Ys a great site with everything....Weâ~@~Yve only just launched/
任何帮助将不胜感激:确认文件是 UTF8 或如何将 utf8 内容写入文件。
更新
为了阐明我如何知道我有 UTF8 格式的数据,我做了以下操作:
- 保存数据时DB设置为utf8
我先运行这个数据库:
$enc = mb_detect_encoding($data);
$data = mb_convert_encoding($data, "UTF-8", $enc);
就在我运行 fwrite 之前,我检查了数据 请注意每条数据都返回“IS utf-8”
if (strlen($data)==mb_strlen($data, 'UTF-8')) print 'NOT UTF-8'; 否则打印 'IS utf-8';
谢谢!
最佳答案
如果您知道数据是 UTF8 格式,那么您想要设置 header 。
我写了一个解决方案来回答另一个问题。
解决方案如下:由于UTF-8字节顺序标记是\xef\xbb\xbf
,我们应该将它添加到文档的头部。
<?php
function writeStringToFile($file, $string){
$f=fopen($file, "wb");
$file="\xEF\xBB\xBF".$file; // this is what makes the magic
fputs($f, $string);
fclose($f);
}
?>
您可以根据您的代码调整它,基本上您只是想确保您编写的是 UTF8 文件(正如您所说,您知道您的内容是 UTF8 编码的)。
关于php - fwrite() 和 UTF8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6336586/