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[ファイル][名前]をチェックしました。
ファイル名は正しいようです。また、エラーのないファイル コンテンツのアップロード。

ファイルが一時ディレクトリからアップロードディレクトリに移動されたときに何かが起こっていると思いますが、アイデアがありません:(

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

urlencode()おそらく、サーバー側で名前を付けてから表示する必要がありurldecode()ます。サーバーが Unicode を適切に処理していないだけです。

于 2013-03-09T21:08:40.547 に答える