使用utf-8 arabic charset字符串的文件名为PHP重命名失败

时间:2012-06-28 11:42:33

标签: php rename

我有一个php重命名功能的问题,如果文件名是带有空格的阿拉伯语单词,则会失败。

e.g。

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

(路径)

中没有此类文件或目录

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

xxxxxxx这里至少有六个空格。

我尝试了urlencode(),但仍然没有结果。

任何建议!

2 个答案:

答案 0 :(得分:2)

此示例应该有帮助,我测试Bellow代码并且它在Windows中用于阿拉伯语/波斯语名称:

$newname  = $filename = iconv("utf-8", "cp1256","گچپژ");
echo rename("1.txt", $newname);

答案 1 :(得分: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

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

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

ls -1 | od -tx1

您将看到由0a分隔的所有文件名都是换行符。

如果两个输出都匹配,则问题出在PHP或系统中(两者都不太可能),如果不是,则必须从编码开始追逐代码中的问题,编码必须是UTF-8无处不在。

相关问题