双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

用PHP接收上传文件,文件名中的中文部分在服务器端显示为问号?

酷睿N核 酷睿N核 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
【遇到的问题】

尝试使用 PHP 接收上传文件,文件接收成功,但是文件名中的中文部分在服务器端却一直显示为问号?



使用 FTP 上传的中文名文件可正常显示;

文件内容中的中文字符也没有问题!

【进行过的尝试】

自己判断应该是编码问题,但是分别使用了——

iconv('UTF-8','gbk',$_FILES['userfile']['name']);

iconv('UTF-8','gb2312',$_FILES['userfile']['name']);

iconv('gbk','UTF-8',$_FILES['userfile']['name']);

iconv('gb2312','UTF-8',$_FILES['userfile']['name']);


均没有成功。

另外还尝试先将上传文件另存为“UTF-8”的编码,结果一样!

【测试环境】

服务器端
主机类型:阿里云虚拟主机
操作系统:CentOS 6.5 64位
PHP版本:PHP5.5

客户端
操作系统:Windows 10 家庭中文版 1803

【相关代码】

upload.html(上传)
<html>
<head>
<title>Administration - upload new files</title>
</head>
<body>
<h1>Upload new news files</h1>
<form action="upload.php" method="post" enctype="multipart/form-data">
<div>
<input type="hidden" name="MAX_FILE_SIZE" value="1000000"/>
<label for="userfile">Upload a file:</label>
<input type="file" name="userfile" id="userfile"/>
<input type="submit" value="Send File"/>
</div>
</form>
</body>
</html>


upload.php(接收)
<html>
<head>
<title>Uploading...</title>
</head>
<body>
<h1>Uploading file...</h1>
<?php
$filename=iconv('UTF-8','gbk',$_FILES['userfile']['name']);
$upfile='../uploads/'.$filename;
if(is_uploaded_file($_FILES['userfile']['tmp_name'])){
if(!move_uploaded_file($_FILES['userfile']['tmp_name'],$upfile)){
echo "Problem:Could not move file to destination directory.";
exit;
}
}else{
echo "Problem:Possible file upload attack.Filename:".$filename;
exit;
}
echo "File uploaded successfully.<br/><br/>";
?>
</body>
</html>
...全文

相关推荐

评论 5
收藏 已收藏
分享
返回顶部
酷睿N核
基础编程 21,889 成员 140,329 内容