5

如果我写:

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

然后它很好并且工作。

但如果我把它改成:

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

它会报告

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

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

4

4 回答 4

0

此示例应该有所帮助,您应该找到您的语言代码页并用它替换。我测试了 Bellow 代码,它在 Windows 中适用于阿拉伯/波斯名称:

$newname = iconv("utf-8", "cp1256","گچپژ");
echo rename("1.txt", $newname);
于 2015-04-19T13:16:49.607 回答
0

文件系统不一定使用 UTF-8。例如,这就是 Wikipedia 关于NTFS的说法:

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

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

于 2009-11-19T09:20:28.750 回答
0

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

如果此调用未返回包含“utf-8”的内容,则表示它失败,然后将返回当前语言环境。

于 2010-01-09T11:17:54.297 回答
-1

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

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

于 2009-05-18T02:16:05.087 回答