我的上传文件有上传文件的问题{μανος.jpg}上传了ΞΞΞΞΞ¥ΞΞ.jpg在我的目录中为什么?我不使用mysql,其他图片上传成功与他们自己名。
我的代码是:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">
<head profile="http://gmpg.org/xfn/11">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<?php
$uploaddir = './uploads/';
$file = $uploaddir . basename($_FILES['uploadfile']['name']);
if (move_uploaded_file($_FILES['uploadfile']['tmp_name'], $file)) {
echo "success";
} else {
echo "error";
}
?>
</head>
<body>
</body>
感谢
答案 0 :(得分:2)
似乎底层文件系统无法处理unicode文件名,或者从浏览器获取不正确的数据。
确保您发送文件的表单也是UTF-8编码。
如果这没有帮助:
最常见的方法是为文件提供一个新的计算机生成名称(如数字,或用户ID和序列号,或随机字符串)。这将是最简单的方式。
如果这不是一个选项,请在存储之前尝试在文件名上使用urlencode()
。这将创建一个保证在文件系统上工作的文件名。每当输出文件名时,使用urldecode()
来显示它 - 如果不是编辑错误的浏览器,则应显示正确的希腊字符。
如果这不起作用,浏览器将以客户端操作系统的编码方式发送文件名(例如Windows / NTFS中的UTF-16)。在这种情况下,您需要启动sniffing the character encoding(非常不可靠)或使用选项1。
答案 1 :(得分:0)
操作系统编码的字符猜测文件名所在,与用于上传文件的字符编码不同。
这些字符编码的内容在很大程度上取决于所使用的浏览器。
答案 2 :(得分:0)
您可能需要使用iconv()
将提交的文件名转换为与文件系统相同的字符编码。
或者,如果您不关心它在磁盘上的外观,但只想在不同的页面调用中显示它,请考虑使用base64编码文件名。在文件名中使用国际字符最终会在每次尝试时引起问题。