【发布时间】:2013-08-13 08:38:16
【问题描述】:
我是越南人,我想上传一个像这样的 utf-8 文件名
Tên Tệp Tiếng Việt.JPG
这是我的代码
<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>utf-8</title>
</head>
<body>
<?php
if(isset($_POST["submit"])) {
if($_FILES["upload"]["error"] > 0 ) echo "FILE ERROR!";
else
{
$base_dir = "D:/";
$fn = $_FILES["upload"]["name"];
$fn2 = $base_dir.$fn;
move_uploaded_file($_FILES["upload"]["tmp_name"],$fn2);
}
}
?>
<form action="" method="post" enctype="multipart/form-data" name="form1" id="form1">
<input type="file" name="upload" id="upload" />
<input type="submit" name="submit" id="submit" value="Send" />
</form>
</body>
</html>
但是当我上传时,我在我的电脑上看到 D:\ 有一个类似的文件
Tên Tệp Tiếng Việt.JPG
如何解决这个问题,谢谢
【问题讨论】:
-
在 Windows 上,您可能必须使用 iconv() 将其转换为 ucs2
-
@Jack 我尝试 ` $fn2 = iconv("UTF-8","ucs2", $base_dir.$fn) ;` 但得到错误 iconv(): Wrong charset, conversion from @987654324 @ucs2' 不允许?
-
其实是
UCS-2:) -
我将其编辑为 $fn2 = iconv("UTF-8","UCS-2", $base_dir.$fn);但我收到新错误
move_uploaded_file(): Filename cannot be empty ..和move_uploaded_file(): Unable to move 'E:\PHP\Xampp\tmp\php6B2C.tmp' ...?怎么了 -
第一件事。你能
echo你在服务器上收到的文件名吗?测试文件名是否上传 UTF-8 编码?因为 那个 部分可能正在工作。问题是 PHP 在写入文件时如何与文件系统交互,这基本上取决于底层文件系统所做的事情,这在 Windows 的情况下可能非常丑陋和复杂。如果文件名在 UTF-8 中上传很好,问题就变成了“如何在 UTF-8 中编写文件名”,答案可能不太好。跨度>
标签: php file-upload character-encoding upload