我正在使用php fwrite()创建一个文件,我知道我的所有数据都是UTF8(我已经对此进行了大量测试 - 将数据保存到数据库并在普通网页上输出所有工作正常并报告为utf8.)但是我我被告知我输出的文件包含非utf8数据:(在bash(CentOS)中是否有命令检查文件的格式?
使用vim时,它将内容显示为:
Don~~~~你做什么...... It~~~~是一个很棒的网站...... We ~~ Yve刚刚推出/
任何帮助将不胜感激:确认文件是UTF8或如何将utf8内容写入文件.
UPDATE
为了澄清我如何知道我有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';
else print 'IS utf-8';
谢谢!
Flo*_*ima 26
如果您知道数据是UTF8而不是您想要设置标题.
我写了一个解决另一个问题的解决方案.
解决方案如下:作为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);
}
?>
Run Code Online (Sandbox Code Playgroud)
您可以根据代码进行调整,基本上您只需要确保编写UTF8文件(正如您所说,您知道您的内容是UTF8编码的).
fwrite()
不是二进制安全的.这意味着,您的数据 - 无论是否正确编码 - 可能会被此命令或其基础例程所破坏.
为了安全起见,您应该使用fopen()
二进制模式标志.那是b
.之后,fwrite()
将保持您的字符串数据"按原样",这是在PHP中直到现在的二进制数据,因为PHP中的字符串是二进制字符串.
背景:文本和二进制数据之间的某些系统不同.二进制标志将在此类系统上显式命令PHP以使用二进制输出.当你处理UTF-8时,你应该注意数据不会被管理.通过将字符串数据作为二进制数据处理来防止这种情况.
但是:如果不是你在问题中告诉你保留了数据的UTF-8编码,那么你的编码就会被破坏,甚至二进制安全处理也会保持破坏状态.但是,使用二进制标志,您仍然可以确保这不是fwrite()
您的应用程序中的一部分.
如果您只有数据,那么它在另一个答案中写得非常合理,您不知道编码.但是,您可以验证数据是否验证UTF-8编码,因此至少有机会检查编码.PHP中的一个函数执行此操作我已经发布了一个UTF-8相关的问题,所以如果你需要调试它可能对你有用:回答:SimpleXML和中文查找can_be_valid_utf8_statemachine,这是函数的名称.
归档时间: |
|
查看次数: |
44941 次 |
最近记录: |