我正在使用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 [文件] [名]。
文件名似乎是正确的。文件内容上传也没有错误。
我想当文件从temp目录移动到上传目录时会发生一些事情 但我没有想法:(
答案 0 :(得分:2)
答案 1 :(得分:0)
也许您需要urlencode()
服务器端的名称,然后urldecode()
进行显示。您的服务器只是没有正确处理Unicode。
答案 2 :(得分:0)
正如您所说的文件名正确显示(希腊字母),您只需要将它们转换为utf-8
即可。您只需使用mb_convert_encoding。
$file_name = mb_convert_encoding($_FILES[file][name], 'utf-8');