2

我有一个 php rename 函数的问题,如果文件名是带有空格的阿拉伯语单词,它会失败。

例如

rename(temp/أم كلثوم       ثوار - ثوار.mp3,audio/13408831061.mp3);

(路径)中没有这样的文件或目录

请注意: أم كلثومxxxxxxxxثوار - ثوار.mp3

xxxxxxx这里至少有六个空格。

我试过了urlencode(),但还是没有结果。

任何建议!

4

2 回答 2

2

这个示例应该有帮助,我测试了波纹管代码,它在 Windows 中适用于阿拉伯/波斯名称:

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

要检查您$file_id是否正确,请在类 Unix 系统上执行此操作:

echo "<pre>\n"; // for HTML output only
system("echo -n '$file_id' | od -tx1");

使用此值,它应该是您报告的文件名(您可以echo进行检查)

$file_id = "\xD9\x83\xD9\x84\xD8\xAB\xD9\x88\xD9\x85 \xD8\xAB\xD9\x88\xD8\xA7\xD8\xB1 - \xD8\xAB\xD9\x88\xD8\xA7\xD8\xB1.mp3";

输出是

0000000 d9 83 d9 84 d8 ab d9 88 d9 85 20 d8 ab d9 88 d8
0000020 a7 d8 b1 20 2d 20 d8 ab d9 88 d8 a7 d8 b1 2e 6d
0000040 70 33
0000042

(如您所见,以 a 结尾的B1序列会重复,最后 4 个字节是.mp3

在文件所在的目录中,您可以发出

ls -1 | od -tx1

0a你会看到所有用换行符分隔的文件名。

如果两个输出都匹配,则问题出在 PHP 或系统中(两者都不太可能),如果不匹配,您将不得不从编码开始,从编码开始,在任何地方都必须是 UTF-8。

于 2012-06-28T12:46:27.557 回答