首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP文件上传-处理阿拉伯/中文/日文文件名

问PHP文件上传-处理阿拉伯/中文/日文文件名
EN

Stack Overflow用户
提问于 2009-07-08 07:10:00
回答 3查看 3.4K关注 0票数 3

我有一个系统,其中用户上传文件(pdf,word)等。问题是,外国用户上传的文件名在阿拉伯语,中文,日语和系统,能够处理他们,是添加到数据库中。

出现问题的地方是尝试使用php下载文件:

代码语言:javascript
复制
$result = mysql_query($query) or die('Error, query failed');

list($filename, $type, $filesize, $filepath) = mysql_fetch_array($result);

header("Content-Disposition: attachment; filename=$filename");

header("Content-length: $filesize");

header("Content-type: $type");

readfile($filepath);

系统无法识别文件名,因此无法下载该文件。有什么建议吗?

EN

回答 3

Stack Overflow用户

发布于 2009-07-09 15:31:23

我已经避免了这个问题,方法是为上传的每个文件生成一个唯一的id,并使用该ID重命名文件,然后将id、原始文件名和扩展名保存在数据库表中。然后,您可以轻松地在表中查找所需的ID,检索原始文件名(您可能会显示它以便于阅读)和扩展名,然后下载{id}.{扩展名}文件。

这也有一个额外的好处,如果上传的两个文件具有完全相同的名称,则后一次上传不会覆盖原始文件。

票数 3
EN

Stack Overflow用户

发布于 2009-07-08 10:17:23

上传Unicode名称很复杂,比如(例如我是神.doc )一直到php5和linux,我怀疑很多操作系统都不支持这样的文件名。

您的另一种选择是使用一些自定义名称(可能是{.doc-id}文件)上传它们,并将它们的信息(如原始文件名)存储在数据库表中,在下载页面上,您可以使用包含该文件信息的表中存储的信息来修改标头

票数 1
EN

Stack Overflow用户

发布于 2009-07-08 18:23:20

如果需要将文件名存储在MySQL中,请确保具有适当的表和列排序规则,如utf8_unicode_ci。在连接之后,不要忘了做mysql_query("SET NAMES utf8");。这应该足以正确地存储和检索Unicode字符串。

至于ASCII头和非Content-Disposition文件名,已经有了一个很好的答案:"How to encode the filename parameter of Content-Disposition header in HTTP?“。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1096533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档