fwrite()和UTF8
|
我正在使用php fwrite()创建一个文件,并且我知道我的所有数据都在UTF8中(我已经对此进行了广泛的测试-将数据保存到db并在常规网页上输出时,所有工作都很好,并报告为utf8。),但是我被告知我正在输出的文件包含非utf8数据:( bash(CentOS)中是否有命令检查文件格式?
使用vim时,其内容显示为:
不要做任何事情....它@@〜是
很棒的网站
一切……我们……只是
发射/
任何帮助将不胜感激:确认文件为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\';
else print \'IS utf-8\';
谢谢!
没有找到相关结果
已邀请:
8 个回复
素汞读
您可以将其适应您的代码,基本上,您只需要确保编写一个UTF8文件即可(正如您所说的那样,您知道您的内容是UTF8编码的)。
掀辟髓观粟
不是二进制安全的。这意味着您的数据(无论是否经过正确编码)可能会被此命令或其基础例程破坏。 为了安全起见,应在二进制模式标志中使用
。那是七英镑。之后,“ 5”将按“原样”保护您的字符串数据,并且直到现在为止在PHP中都是二进制数据,因为PHP中的字符串是二进制字符串。 背景:某些系统在文本数据和二进制数据之间有所不同。二进制标志将明确命令此类系统上的PHP使用二进制输出。处理UTF-8时,应注意不要弄乱数据。通过将字符串数据作为二进制数据进行处理可以避免这种情况。 但是:如果您不像在问题中告诉您的那样,保留了数据的UTF-8编码,则编码将被破坏,甚至二进制安全处理也将保持破坏状态。但是,使用二进制标志,您仍要确保这不是破坏应用程序的“ 5”部分。 正确地在这里的另一个答案中写道,如果仅包含数据,则不知道编码。但是,您可以验证数据是否验证UTF-8编码,因此至少为您提供了一些检查编码的机会。我已经在UTF-8相关问题中发布了此函数中的PHP函数,因此如果您需要调试,它可能对您有用:答案:SimpleXML和中文查找can_be_valid_utf8_statemachine,这就是名称功能的
博沮富教全
您将得到与您的输出类似的东西。
薄响
我发现这件作品对我有用:)
亲奋漏
艾食魄轻县
-错误。 编码不是文件格式。因此,请检查页面标题中的字符集,您将从此处获取数据:
并检查数据是否真的采用多字节编码:
玖料萄
仇聘发栖