我有外国字符命名的文件,我使用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所有这些文件都是公开的,我隐藏它们的唯一方法就是隐藏网址。
答案 0 :(得分:6)
您可能需要urlencode()名称:
$url = "http://filedownload.s3.amazonaws.com/" . urlencode("cénari.txt");