如果我写:
rename('php109.tmp','test.jpg');
然后它很好并且正常工作。
但如果我将其更改为:
rename('php109.tmp','中文.jpg');
它会报告
“没有这样的文件或目录......”。
但是如果可以将多字节字符写入数据库然后可以读出,那么为什么它在重命名时会失败?
答案 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!)。