PHP文件上传错误的文件名编码

时间:2015-05-20 22:58:37

标签: php html file-upload utf-8

我正在做一个网页并且文件上传有问题,这会将文件名变音符号更改为一个奇怪的名称。

例如,当我上传名为“töö.docx”的文件并查看上传文件夹中的名称时,它会显示我的“tƶƶ.docx”。

当我在index.php中调出文件名时,它会显示正确的名称“töö.docx”。

但是在我进入上传文件夹并手动将名称“tƶƶ.docx”更改为“töö.docx”并在index.php中调出文件名后,它显示“t” .docx“这是错的。

以下是index.php上传的代码:

<form method="post" enctype="multipart/form-data">
  <strong>File upload:</strong>
  <small>(max 8 Mb)</small>
  <input type="file" name="fileToUpload" required>
  <input type="submit" value="Upload" name="submit">
</form>

这是上传控制器代码:

$doc_list = array();
   foreach (new DirectoryIterator('uploads/') as $file)
{
   if ($file->isDot() || !$file->isFile()) continue;
   $doc_list[] = $file->getFilename();
}

$target_dir = "uploads/";
$target_file = $target_dir . basename( isset($_FILES["fileToUpload"]["name"]) ? $_FILES["fileToUpload"]["name"] : "");
$file = isset($_FILES["fileToUpload"]) ? $_FILES["fileToUpload"] : "";
$up_this = isset($_FILES["fileToUpload"]["tmp_name"]) ? $_FILES["fileToUpload"]["tmp_name"] : "";
$file_name = isset($_FILES["fileToUpload"]["name"]) ? $_FILES["fileToUpload"]["name"] : "";

if (!empty($file)) {
    if(isset($_POST["submit"])) {
        if (file_exists($file_name)) {
            echo "File already exists.";
            exit;
        } else {
            $upload =  move_uploaded_file($up_this, $target_file);
            if ($upload) {
                echo "File ". '"' . basename($file_name). '"' . " has been uploaded";
            } else if (!$upload) {
                echo "Could not upload file";
                exit;
            }
        }
    }
}

我使用变量$ doc_list来调出index.php文件夹中文档的名称:

<div>
    <?php if (!empty($doc_list)) foreach ($doc_list as $doc_name) { ?>
        <tr>
            <td><?= $doc_name ?></td>
        </tr>
    <?php } ?>
</div>

我已将网站字符集设置为utf-8。我仍然不知道为什么它没有用变音符号显示正确的文件名。

1 个答案:

答案 0 :(得分:1)

尝试像这样添加accept-charset="UTF-8"

<form method="post" enctype="multipart/form-data" accept-charset="UTF-8">