system
(system)
1
Hi,强
上传中文名的文件,saveAs函数将文件保存到相应目录后,文件是乱码。
$model->url='namingdocs/'.$model->usernum.'_'.$model->namingdoc;
其中$model->namingdoc是上传所申明的变量,这段代码是将文件名写入到数据的一个字段。数据库中保存的中文代码正确。
$model->namingdoc->saveAs('namingdocs/'.$model->usernum.'_'.$model->namingdoc);
这段代码是将文件保存到相应目录中的对应文件,但是文件名乱码。这个是save()函数的一个问题还是我的写法有错误呢?谢谢。:)
qiang
(Qiang Xue)
2
这个应该和你的文件名编码有关系。你的数据库是用什么编码的?页面呢?
system
(system)
3
数据库,文件都是utf-8编码,数据库连接字符串也设置好了utf-8.
qiang
(Qiang Xue)
4
那就比较奇怪了。saveAs内部就是调用file_put_contents()来保存文件的,没什么特殊的地方。
system
(system)
5
我一个叫做“测试测试测试测试测试测试.doc”的文件存到指定位置,文件名就变成“娴嬭瘯娴嬭瘯娴嬭瘯娴嬭瘯娴嬭瘯娴嬭瘯.doc”了。。。难道是因为我在windows环境下进行操作的原因?
qiang
(Qiang Xue)
6
你试试直接在代码里调用如下代码:
file_put_contents('测试.doc', 'something');
system
(system)
8
直接创建test.php 里面放代码<?php file_put_contents('测试.txt', 'test123'); ?>出来的文件名是正确的。
将代码放在controller或者view里面,则文件名都是乱码。
qiang
(Qiang Xue)
9
我测试过了,应该是编码的问题。你的操作系统可能是GB2312编码,而你代码里的文件名是UTF8。
system
(system)
10
只要文件格式是utf-8就会产生乱码文件名了。在单独php中也是如此。不知道放入linux系统还会不会有该问题。
正好看到你回复,呵呵。对的,是系统的编码问题。我服务器是debian的,到时候放上去测试一下看看。