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

【解决方法】根据 Derek_Chen 的提示,在前端代码中添加

<meta charset="gbk">

后显示正常!


【遇到的问题】

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

【linux】用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、表单提交的php后端,第一行添加

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

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

<meta charset="UTF-8">

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

以上是 【linux】用PHP接收上传文件,文件名中的中文部分在服务器端显示为问号? 的全部内容, 来源链接: utcz.com/a/85116.html

回到顶部