PHP-输出错误字符的文件内容

PHP-输出错误字符的文件内容,php,file,character-encoding,download,Php,File,Character Encoding,Download,我正在为下载文件制作一个php脚本,但有一个奇怪的问题 结果是,我有一个类a,它包含下载文件的方法,然后我使用'require_once'将该文件放入一个名为init.php的文件中,init.php是生成类实例和用户必须访问的实例的主脚本所需的。php是启动系统并加载其配置的工具 好的,类工作正常,但当文件为文件目标内容进行输出时,问题就出现了 这是我的课堂教学方法: public function descargar ($nombreDescarga = null) { if ($

我正在为下载文件制作一个php脚本,但有一个奇怪的问题

结果是,我有一个类a,它包含下载文件的方法,然后我使用'require_once'将该文件放入一个名为init.php的文件中,init.php是生成类实例和用户必须访问的实例的主脚本所需的。php是启动系统并加载其配置的工具

好的,类工作正常,但当文件为文件目标内容进行输出时,问题就出现了

这是我的课堂教学方法:

public function descargar ($nombreDescarga = null) 
{
    if ($this->id === null || $this->formato === null || $nombreDescarga === null || 
        gettype($nombreDescarga) != "string" || strlen($nombreDescarga) == 0) 
    {
        return 1;
    }

    $ruta = RUTA_SISTEMA . "/" . RUTA_ASIGNACIONES . "/asign-" . $this->id . "." . $this->formato;
    $tamano = @filesize($ruta);

    /**
    * Comprobamos si el archivo existe.
    */

    if ($tamano === false) 
    {
        return 2;
    }

    /**
    * Saneamos el nombre de salida del archivo.
    */

    $nombreDescarga = Framework\sanearNombreArchivo($nombreDescarga . "." . $this->formato);

    /**
    * Colocamos los headers necesarios.
    */

    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename=' . $nombreDescarga);
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . $tamano);

    /**
    * Abrímos el archivo y lo enviamos al navegador.
    */

    $contenido = @file_get_contents($ruta);

    if ($contenido === false) 
    {
        return 3;
    }

    echo $contenido;

    return 0;
}
好的,这是下载文件、放置标题、然后输出文件内容(其余部分是纯验证)的常用方法,但当文件被下载时,文件的内容不是:

ÈFÃË‹Átí#ª6˜²"wÇ9Ê´ÀÄ:0t
结果如下:

�F�ˋ�t�#�6��"w�9����:0t
我试着为下载制作一个单独的脚本,效果很好,文件下载时使用了正确的字符,我刚刚发现当我包含init.php文件时,问题来了,似乎有双字符集或其他东西,文件结束时出错了。我注意到函数file_get_contents返回正确的字符串内容,因为我尝试使用fopen和fwrite函数将字符串保存到一个新文件中,文件是用正确的字符复制的

在我看来,生成输出的主脚本的字符集有问题,我尝试在我的方法中设置“header('Content-Type:application/octet-stream;charset=UTF-8');,但没有成功

这是我第一次看到这样的东西,非常奇怪,任何建议都将不胜感激,谢谢

已修复

下一个问题是:

在我的init.php文件中,我需要更多的文件,其中一个(名为CONFIG.class.php的文件)有UTF-8编码,我真的认为所有的文件都是用ANSI编码的(是的,除了这一个),然后我用Notepad++将文件编码改为ANSI和voila!它起作用了


感谢大家的建议:)

您使用的是哪个编辑器;使用升华文本,您可以检查文件编码并将文件另存为utf8…código con comentarios FTW!!我使用Notepad++和ANSIBut中编码的文件,您的所有php文件都有相同的编码吗??。init.php文件也是Ansi格式的??是的,如果使用php函数utf8_encode或utf8_decode,则所有必需的文件都是Ansi:/