如何在PHP中上传带有中文名称的文件?

时间:2011-05-04 07:34:30

标签: php file-upload

我有学习门户(LMS),我将上传文档,图像,视频等来创建内容。如果上传的文件有中文名称,则不会上传。而是上传具有垃圾名称的损坏文件。

例如,我尝试上传名为地球科学.jpg 的文件。但是在服务器上我得到了这个文件地çƒç§'å| .jpg 。此外,上传的文件在服务器中也已损坏。

我希望这个文件在服务器上以相同的名称上传。 因为我想搜索这些文件并在以后重复用于创建内容。

供参考: 我在Windows XP上安装了XAMPP服务器。 安装了中文,韩文和日文语言包。

感谢您的回答。

6 个答案:

答案 0 :(得分:3)

AFAIK ntfs无法处理文件系统上的某些字符。我建议用通用名称存储文件。

例如,您可以创建一个包含两列的表:name和file,保存原始名称的名称,以及设置类似md5(name)的文件。

答案 1 :(得分:1)

如果您需要搜索名称,请使用数据库存储名称信息和文件位置,并使用您自己的约定保存文件。

示例

// sql entry 
original name = 地球科学.jpg
path = /some/place/1.jpg

搜索时,使用数据库查找给定的文件名和位置。在构建图像存储解决方案时,分离存储逻辑是常见的,不仅用于命名问题,还包括在文件夹中累积的文件数量方面的限制/ spped注意事项。

答案 2 :(得分:1)

使用iconvmb_convert_encoding更改字符串编码。

// Upload the file into the temp dir
$target_path = "uploadfiles/"; 
$target_path .= $_FILES['fileField']['name']; 

// iconv()
move_uploaded_file($_FILES['fileField']['tmp_name'], iconv("UTF-8", "big5", $target_path))
// mb_convert_encoding()
move_uploaded_file($_FILES['fileField']['tmp_name'], mb_convert_encoding($target_path, "big5", "UTF-8"))

答案 3 :(得分:0)

确保显示表单的页面以utf-8或更高版本呈现,通常这样做,您还可以选择使用表单元素的accept-charset属性来指示发布的数据作为指定的字符集。

不确定这一切是否能完成这项工作,请告诉我。

答案 4 :(得分:0)

我认为你可能想要使用某种数据库解决方案,特别是当你以后需要搜索文件时。使用数据库可以避免I / O开销。

答案 5 :(得分:0)

我认为在你弄清楚如何处理上传之前,你必须学习/理解文件的字符集。我担心我对非欧洲字符集并不太熟悉,也不知道哪种字符集使用最广泛。

UTF-8应该是一个安全的赌注,几乎可以处理任何你想要投入的东西。在我最近在我的博客上写的帖子中,有一些相关的信息可用于配置您的应用程序:How to Avoid Character Encoding Problems in PHP