PHP文件打开编码问题?

PHP文件打开编码问题?,php,encoding,Php,Encoding,当我试图打开一个由PHP游戏创建的.log文件时,我得到了一大堆这样的信息 ÿþ*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*� � K�2� �E�n�g�i�n�e� �s�t�a�r�t� �u�p�.�.�.� � [�2�0�0�9�/�2�2�/�0�9�]� � [�1�6�:�0�7�:�3

当我试图打开一个由PHP游戏创建的.log文件时,我得到了一大堆这样的信息

ÿþ*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*�*� �
K�2� �E�n�g�i�n�e� �s�t�a�r�t� �u�p�.�.�.� �
[�2�0�0�9�/�2�2�/�0�9�]� �
[�1�6�:�0�7�:�3�3�]� �
[�0�.�1�.�4�6�.�0�]� �
[�0�]� �
我不知道为什么?我的代码是

$file = trim($_GET['id']);
$handle = @fopen($file, "a+");

    if ($handle) {
        print "<table>";
        while (!feof($handle)) {
            $buffer = stream_get_line($handle, 10000, "\n");
            echo "<tr><td width=10>" . __LINE__ . "</td><td>" . $buffer . "</td></tr>";
        }
        print "</table>";

fclose($handle);
$file=trim($\u GET['id']);
$handle=@fopen($file,“a+”);
如果($handle){
打印“”;
而(!feof($handle)){
$buffer=stream\u get\u line($handle,10000,“\n”);
回显“.”行“.”缓冲区“.”;
}
打印“”;
fclose($handle);

我使用的是
stream\u get\u line
,因为它显然更适合大文件?

您可能会遇到UTF-8字节顺序标记: 试着这样读:

<?php
// Reads past the UTF-8 bom if it is there.
function fopen_utf8 ($filename, $mode) {
    $file = @fopen($filename, $mode);
    $bom = fread($file, 3);
    if ($bom != b"\xEF\xBB\xBF")
        rewind($file, 0);
    else
        echo "bom found!\n";
    return $file;
}
?>


From:

PHP实际上对编码知之甚少。尤其是,它对文件的编码一无所知

数据看起来像UTF-16LE,因此您需要将其转换为您可以处理的内容,或者,由于您只是在打印,您可以将整个脚本转换为UTF-16LE格式输出其HTML

我可能更喜欢转换为UTF-8,并将其用作页面编码,因此您可以确保不会丢失任何字符

请注意,不管您做什么,都应该去掉第一行的前两个字符,假设编码总是相同的。在您显示的数据中,这些字符是字节顺序标记,它告诉我们文件的编码(UTF-16LE,如我前面提到的)

但是,如果它看起来是纯文本,并且你所做的只是打印数据,考虑只在一个普通的旧文本编辑器中打开它(支持Unicode)。不知道你的操作系统,我犹豫不定地建议一个特定的系统,但是如果你在Windows上,文件相对小,记事本就可以做到。


作为旁注,
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuu
不会给出您正在阅读的文件的行号,它会打印当前正在执行的脚本行的行号。

当使用文本编辑器查看时,您的.log文件是什么样子的?您可以发布前几行吗?当您开始接受答案时?我可以用记事本很好地打开它。如果我通过web浏览器访问.log文件,可以很好地查看它。前几行************************************************************************************************************************************************************************************************************************K2引擎启动…[2009/22/09][16:07:33][0.1.46.0][0]libxml2版本:20702命令行:执行“~/startup.cfg”~/login.cfg”~/login.cfg“Executing”/init.cfg”加载StringTable'/stringtables/interface.str'它不是UTF-8,而是UTF-16LE。UTF-16LE BOM就在数据的开头。