为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
神不在的星期二 2019-03-14 15:37:19
【解决方法】根据 Derek_Chen 的提示,在前端代码中添加 <meta charset="gbk"> 后显示正常! 【遇到的问题】 尝试使用 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>
查看完整描述

1 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

根据你的代码,建议尝试以下方法
1、表单提交的php后端,第一行添加

header("Content-Type:text/html;charset=utf-8");

2、前端的html中的<head></head>中添加以下内容

<meta charset="UTF-8">

添加以上两个部分后,先取消掉相关的iconv()转换函数测试一下,如果还有问题再在评论补充相关描述

查看完整回答
反对 回复 2019-03-18
  • 1 回答
  • 0 关注
  • 396 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信