【发布时间】:2021-12-17 16:21:32
【问题描述】:
<?php
$oldname = 'D:\a\file.zip';
$newName = 'D:\a\öÖçÇ\İ\file.zip';
//$newName = 'D:\a\ooCC\i\file.zip'; it's work
rename($oldname, $newName);
?>
错误:
Warning: rename(D:\a\file.zip,D:\a\öÖçÇ\İ\file.zip): The system cannot find the path specified. (code: 3) in C:\Users\Desktop\rename.php on line 9
我尝试了“url_encode”、“iconv”但没有成功。
【问题讨论】:
-
确认一下,目录“D:\a\öÖçÇ\İ\”是否已经存在?如果您只是将文件重命名为具有土耳其语字母,而不是将其移动到一个目录中,您是否会遇到同样的问题,例如
rename("D:\a\file.zip", "D:\a\file-öÖçÇ-İ.zip");? -
是的,文件夹目录存在。我必须使用土耳其语字符。我会把它集成到一个系统中。
-
一直都是一团糟,但如果我没记错的话,Windows 几乎没有在任何地方使用 UTF-8,更不用说文件系统了,而且 PHP 在最近的版本中只使用正确的 Win32 API。我建议你手动创建一个文件,从 PHP 中读取它的名称,然后
bin2hex()看看它的样子。 -
你说你“试过 iconv”,你能告诉我们你到底尝试了什么吗?由于 iconv 是一种从一种编码转换为另一种编码的函数,因此只有知道拥有的编码以及想要的编码,才能有效地使用它。
-
Code Page 1252 没有“İ”的编码,因此如果目录以该名称存在,则不能使用该编码。我没有安装 Windows PHP 来测试它,但
iconv("UTF-8", "UTF-16", $newNam);似乎更有可能是猜测(如上所述,许多 Windows API 使用 UTF-16 而不是 UTF-8)。另一种可能是你的PHP源文件不是UTF-8的,所以你需要重新保存或者使用iconv("some other encoding your text editor is using", "UTF-8", $newNam);
标签: php utf-8 file-rename