2

我正在使用 xampp 开发 Win7 64。我正在上传一个文件名带有希腊字符的文件。文件名存储不正确,例如 ελληνικά.xlsx 存储为ελληνικά.xlsx。

我想它必须与编码有关。

在我的 html 中,我正在使用

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

我的javascript在下面给出

  function handleFileSelect(evt) { 
  var output=[];

  if (evt.target.files.length === 0 ) exit();
  var f = evt.target.files[0];
  if ($.inArray(f.name.split('.').pop(), ['xls', 'xlsx']) === -1 ) {
    $('#output').html('Wrong file type. Only Excel files are valid.');
    exit;
  }

  ans = fileunit(f.size);    
  output.push('<li><strong>', f.name, ' - ',
              ans[0].toFixed(2), ans[1], '</li>');
  $('#list').html('<ul>' + output.join('') + '</ul>');

  var fd = new FormData();
  fd.append('file', evt.target.files[0]); 

  $.ajax({
    url: 'uploaddata/file',
    data:fd,
    processData: false,
    contentType: false,
    type: 'POST',    
    success: function(data){
      $('#output').html(data);},
    error: function(data)  {
      $('#output').html(data);}    
  });
}    

服务器代码如下

    public function upload() {
// Checking upload error code
  if ($_FILES["file"]["error"] > 0)
    {
       echo file_upload_error_message($_FILES["file"]["error"]);
       return;
    }

  //Checking uplaod directory  
  $uploadDirectory = 'uploads' . DIRECTORY_SEPARATOR;
  if(!is_dir($uploadDirectory))
    {
      @mkdir ($uploadDirectory, 0766, true);
    }
  if(!is_dir($uploadDirectory))
    {
      echo 'Server error. Impossible to create the upload folder.';
      return;
    }
  elseif(!is_writable($uploadDirectory))
    {
      echo 'Server error. Upload directory is not writable.';
      return;
    }  

  //Checking if file is too big  
  if ($_SERVER['REQUEST_METHOD'] == 'POST' && empty($_POST) &&
         empty($_FILES) && $_SERVER['CONTENT_LENGTH'] > 0) 
    {
       $error = 'Server error. File is too large, cannot upload.';
       echo $error;
       return;
    }

  $file_name = $_FILES["file"]["name"];
  if (!move_uploaded_file($_FILES["file"]["tmp_name"], $uploadDirectory.$file_name))
    {
      echo 'Server error. Error moving uploaded file from temp dir to upload dir';
      return;
    }
   echo $file_name . ' was uploaded successfully.';
    }

我在 php 文件中放置了一个断点并检查
了 $_FILES[file][name]。
文件名似乎是正确的。文件内容上传也没有错误。

我猜当文件从临时目录移动到上传目录时发生了一些事情,但我没有想法:(

4

3 回答 3

2

我对西班牙语字符也有同样的问题。就我而言,我使用了utf8_decode()函数并且它有效!

尝试

$file_name = utf8_decode($file_name);
于 2015-01-12T01:59:49.407 回答
0

正如您所说的文件名正确显示(希腊字母),您只需将它们转换为utf-8. 您可以简单地使用mb_convert_encoding

$file_name = mb_convert_encoding($_FILES[file][name], 'utf-8');
于 2013-03-09T21:22:12.583 回答
0

Perhaps you need to urlencode() the name on the server side, and then urldecode() for display. Your server is just not handling Unicode properly.

于 2013-03-09T21:08:40.547 回答