我是越南人,我想上传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 8中文版,与此同时我也遇到类似的问题:
$filename = iconv("utf-8", "cp936", $filename);
cp代表Code page并cp936代表Code page 936,这是Windows简体中文版的默认代码页。
cp
Code page
cp936
所以我认为也许您的问题可以通过类似的方式解决:
$fn2 = iconv("UTF-8","cp1258", $base_dir.$fn);
我不太确定您的操作系统的默认代码页是否正确1258,您应该通过打开命令提示符并键入command来进行自我检查chcp。然后更改1258为命令给您的内容。
1258
chcp
更新
PHP文件系统功能似乎只能处理系统代码页中的字符。因此,您在这里有2个选择:
将文件名中的字符限制为系统代码页-在您的情况下为437。但是我很确定代码页437不包含所有越南语字符。
437
将系统代码页更改为越南语:1258将文件名转换为cp1258。然后,文件系统功能应该起作用。
cp1258
两种选择都是不足的:
选择1:您不能再使用越南语字符,这不是您想要的。
选择2:您必须更改系统代码页,并且文件名字符仅限于代码页1258。
如何更改系统代码页:
转到Control Panel> Region> Administrative> Changesystemlocale,并选择Vietnamese(Vietnam)在下拉菜单中。
Control Panel
Region
Administrative
Changesystemlocale
Vietnamese(Vietnam)