在PHP中读取编码文件

时间:2016-04-27 17:55:24

标签: php unicode encoding utf-8

我有一个文本文件,当我在Sublime Text中打开它时显示如下:

enter image description here

但是当我fread文件并回显php中的每一行时,我会得到像这样的乱码:

enter image description here

我阅读Joel's post on encoding并了解编码的基础知识。此外,当我执行mb_detect_encoding时,它会将字符串检测为UTF-8。现在,我不明白我要对这个字符串编码的信息做什么,以便将其显示或转换为可读字符,如第一张图片中所示。

为什么当它已经是UTF-8时显示乱码? php是否使用不同的编码类型来读取文件? php字符串必须是UTF-8还是ASCII,或者只要我指定它是什么就没关系?

如果有人能帮我理解这个想法,我真的很感激!感谢。

编辑:

Pedro Lobito和彼得的建议奏效了。

$file = file_get_contents($bl_file);
$content = unpack("H*", $file);

但如果有人能解释我为什么要这样做,那还能帮助我理解它!

1 个答案:

答案 0 :(得分:1)

  

但如果有人能解释我为什么要这样做,那还能帮助我理解它!

因为它是二进制文件。 Sublime显示原始二进制值的十六进制人类可读表示。

执行file_get_contents时,将文件读入字符串'0101010',原始位和字节。

当您解压缩(H * / * H代表HEX * /,$ file)时,您告诉PHP,您希望将二进制数据视为字节流的人类可读十六进制编码表示。 (当你看到字母A-F时,你可以告诉它是一个十六进制)

HEX编码比二进制编码更具可读性,这就是Sublime使用它的原因。此外,我曾经看过一个可以用原始二进制编码的人。我很害怕。

当你回应它们时,你只是将原始二进制值流式传输到控制台,它们没有特殊含义,因此控制台(或浏览器)将它们显示为控制字符和其他垃圾,这对于人眼来说已经具有意义。

因此,如果您使用其他文本编辑器打开此文件,它将:

a)显示垃圾(mcedit)

b)显示垃圾并告诉你它是一个二进制文件(vim,gedit)

Sublime过分友好地欺骗你认为它是一个文本文件。

如果您将二进制文件回显到命令提示符/ shell,它可能会终止您的数据。永远不要这样做。因为shell可以将原始二进制数据解释为命令并运行它。

如果你在内部回复一些二进制文件:

rm -rf ~/[bytecode_For_NewLine_Here]

你可以在linux中删除你的主文件夹内容