2009-05-17 43 views
5

如果我写:重命名不支持多字节字符

rename('php109.tmp','test.jpg'); 

那么它的罚款和工作。

,但如果我把它变成:

rename('php109.tmp','中文.jpg'); 

它会报告

“没有这样的文件或目录...”。

但是,如果多字节字符可写入数据库则可以读出,那么失败的原因时,它被重命名?

+0

您的操作系统或文件系统是否支持多字节文件名? – garrow 2009-05-17 03:40:52

+0

是的, 这里是更多的信息: 它是从网页提交时处理的, 页面编码是utf8 db编码是utf8。 和我倾倒字符串只发现它也是utf8 – omg 2009-05-17 03:46:09

+0

你使用什么操作系统?我已经在FreeBSD 4.11,Debian 5.0和OS X 10.6.2上测试过了,没有任何错误。 如果您使用某种系统调用跟踪工具的操作系统,您可以尝试启用它吗? – 2009-12-30 16:26:43

回答

-1

我几乎可以肯定,mbstring与这个特定的问题无关,我认为这里的问题依赖于你的.php文件的编码。

尝试在代码编辑器中将文件的编码更改为UTF-8(无BOM!)。

+0

但文件已经是utf8编码.. – omg 2009-05-18 13:31:25

0

文件系统不一定使用UTF-8。举例来说,这是维基百科说,大约NTFS

NTFS允许名称编码的16位 值(文件名, 流名,索引名称等)的任何序列。这意味着 UTF-16码点的支持, 但文件系统不检查 序列是否是有效的UTF-16(它 允许短的值的任何序列, 并不限于那些以Unicode 标准)。

您可能需要使用iconv()在字符集之间进行转换。

0

您是否尝试过使用setlocale(LC_ALL, array("es_ES.utf-8","[email protected]",'es_ES'));或您的国家/地区代码,以确保区域设置正确?

如果这个调用没有返回带有'utf-8'的东西,这意味着它失败了,然后返回当前的语言环境。

0

这个示例应该有帮助,你应该找到你的语言代码页并替换为那个。我测试波纹代码,它适用于阿拉伯语/波斯语的Windows名称:

$newname = iconv("utf-8", "cp1256","گچپژ"); 
echo rename("1.txt", $newname);