PHP文件重命名-文件名中的非法字符

PHP文件重命名-文件名中的非法字符,php,character-encoding,Php,Character Encoding,我想用PHP重命名文件 我循环遍历包含文件的目录,一旦找到文件,我想使用rename()进行实际重命名 到目前为止,一切都很简单 问题是需要重命名的文件名中包含非法字符。 我可以从名称中删除非法字符,但是当我想使用新名称重命名文件时,找不到它 因此,一旦我能够使用PHP,就会抛出一个警告:系统无法找到指定的文件。(代码:2) PHP似乎无法将该文件识别为文件(is_file()返回false)。 所讨论的文件是pdf文件,我可以在Acrobat Reader中毫无问题地打开它。 该文件是在Mac

我想用PHP重命名文件

我循环遍历包含文件的目录,一旦找到文件,我想使用rename()进行实际重命名

到目前为止,一切都很简单

问题是需要重命名的文件名中包含非法字符。 我可以从名称中删除非法字符,但是当我想使用新名称重命名文件时,找不到它

因此,一旦我能够使用PHP,就会抛出一个警告:系统无法找到指定的文件。(代码:2)

PHP似乎无法将该文件识别为文件(is_file()返回false)。 所讨论的文件是pdf文件,我可以在Acrobat Reader中毫无问题地打开它。 该文件是在Mac上使用Quartz生成的,我使用的是Windows

有人知道如何让PHP将名称中包含非法字符的文件识别为文件吗

PS

这是我的代码:

$dataDirectory = new RecursiveDirectoryIterator($folders);

foreach ($dataDirectory as $dataName => $dataFileName) {

   $isfile = is_file($dataFileName); // false for files with illegal character in filename
   $result = rename($dataFileName, 'testname'); // generates warning mentioned above 

}
什么是服务器操作系统

如果是Windows,您将无法访问UTF-8编码文件名下的文件,因为PHP使用的C IO库的Windows实现将只在系统默认代码页中进行对话。对于西欧安装,这是代码页1252。您可以使用iconv将UTF-8字符串转换为cp1252:

$winfilename= iconv('utf-8', 'cp1252', $utffilename);
(也可以使用utf8_decode,但对于映射到cp1252中0x80-0x9F范围的Windows扩展字符,它会给出错误的结果。)

PHP和其他使用stdio的程序根本无法访问其名称中包含系统代码页指令表之外的字符的文件(例如,西文框中的希腊文)。有一些脚本语言可以通过Win32 API使用本机Unicode文件名,但PHP5不是其中之一

当然,在文件系统采用UTF-8编码的不同操作系统上部署时,不应使用上述步骤。(即现代Linux。)


如果您需要无缝地跨与PHP兼容的服务器,则必须避免在文件名中使用非ASCII字符。抱歉。

谢谢。您声明有脚本语言可以使用本机Unicode文件名。你能推荐一个吗?Node.js就是一个例子。