用于下载名称中包含utf-8字符的文件的PHP脚本

时间:2010-07-14 10:49:06

标签: php download

我有外国字符命名的文件,我使用utf8_encode()对名称进行编码后上传。但现在,当我尝试使用readfile()下载它们时,它们会给出“未找到”错误。

我已粘贴以下代码。我认为问题在于我定义的一些标题。谁能告诉我这是什么问题?

<?php

    ini_set('mbstring.internal_encoding','UTF-8');
    ini_set('mbstring.http_input','auto');
    ini_set('mbstring.http_output','UTF-8');
    ini_set('mbstring.detect_order','auto');
    ini_set('default_charset','UTF-8');

    $url = "http://filedownload.s3.amazonaws.com/cénari.txt";
    header('Content-Description: File Transfer');
    header('Content-Type: text/html; charset=UTF-8');
    header('Pragma: public');
    header('Content-Length: ' . filesize($url));
    header('Content-disposition: attachment; filename='.utf8_decode($url));
    ob_clean();
    flush();
    readfile($url);

?>

我还附加了运行此代码时下载的文件。

我使用PHP代替S3中的其他方法cos所有这些文件都是公开的,我隐藏它们的唯一方法就是隐藏网址。

1 个答案:

答案 0 :(得分:6)

您可能需要urlencode()名称:

$url = "http://filedownload.s3.amazonaws.com/" . urlencode("cénari.txt");