file.saveAs()存储中文文件,文件名有时候正常,有时候错误,很奇怪!

存储代码:

$file->saveAs($file->getName()); (在action中的)

读取代码:while($file = dir($startDir)->read()) { (在action中的)

读取和存储的时候,在php显示文件名都是正常的。

Quote

2269沃尔1897_03b1632244.jpg

但在windows文件系统中,看到的是

Quote

2269娌冨皵1897_03b1632244.jpg

有时候会存储正常,这个时候是在这种情况下:

我改为这段代码来存储,

$file->saveAs(iconv("UTF-8","gb2312",$file->getName()));

存储的文件名更奇怪了,是方块,而且read,显示不出来。我就把代码再改回来,这时候存储就正常了。然后我把view页面刷新,再上传,文件系统中又显示奇怪的中文名了。

这和你操作系统的缺省编码有关。通常类似的问题我建议不要直接用上传的文件名保存文件,而是把文件名存在数据库里。

我这是文件管理器 ,没有用到数据库,这样的情况如何处理?

那么你用iconv应该是可以的。确认一下目标编码是否和操作系统一致。也确认一下源编码是否utf8。我也没有更好的建议了。

iconv更不可取,是普通的post方式上传,没有用ajax。看来中文比较头大。