鍍金池/ 問答/PHP  Linux  HTML/ 用PHP接收上傳文件,文件名中的中文部分在服務(wù)器端顯示為問號(hào)?

用PHP接收上傳文件,文件名中的中文部分在服務(wù)器端顯示為問號(hào)?

【解決方法】根據(jù) Derek_Chen 的提示,在前端代碼中添加

<meta charset="gbk">

后顯示正常!


【遇到的問題】

嘗試使用 PHP 接收上傳文件,文件接收成功,但是文件名中的中文部分在服務(wù)器端卻一直顯示為問號(hào)?

PHP上傳文件中文名顯示異常

使用 FTP 上傳的中文名文件可正常顯示;

文件內(nèi)容中的中文字符也沒有問題!

【進(jìn)行過的嘗試】

自己判斷應(yīng)該是編碼問題,但是分別使用了——

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”的編碼,結(jié)果一樣!

【測(cè)試環(huán)境】

●服務(wù)器端
主機(jī)類型:阿里云虛擬主機(jī)
操作系統(tǒng):CentOS 6.5 64位
PHP版本:PHP5.5

●客戶端
操作系統(tǒng):Windows 10 家庭中文版 1803

【相關(guān)代碼】

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>
回答
編輯回答
不將就

根據(jù)你的代碼,建議嘗試以下方法
1、表單提交的php后端,第一行添加

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

2、前端的html中的<head></head>中添加以下內(nèi)容

<meta charset="UTF-8">

添加以上兩個(gè)部分后,先取消掉相關(guān)的iconv()轉(zhuǎn)換函數(shù)測(cè)試一下,如果還有問題再在評(píng)論補(bǔ)充相關(guān)描述

2018年2月4日 13:07