重命名不支持多字节字符

时间:2009-05-17 03:36:32

标签: php rename multibyte

如果我写:

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

然后它很好并且正常工作。

但如果我将其更改为:

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

它会报告

  

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

但是如果可以将多字节字符写入数据库然后可以读出,那么为什么它在重命名时会失败?

4 个答案:

答案 0 :(得分:0)

文件系统不一定使用UTF-8。例如,这就是维基百科关于NTFS所说的内容:

  

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

您可能需要使用iconv()来转换字符集。

答案 1 :(得分:0)

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

如果此调用未返回包含'utf-8'的内容,则表示失败,然后将返回当前区域设置。

答案 2 :(得分:0)

这个样本应该有帮助,你应该找到你的语言代码页并替换它。我测试Bellow代码并且它在Windows中用于阿拉伯语/波斯语名称:

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

答案 3 :(得分:-1)

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

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