我的php重命名功能有问题,如果文件名用阿拉伯语单词带空格,它将失败.
例如
rename(temp/أم كلثوم ثوار - ثوار.mp3,audio/13408831061.mp3);
(路径)中没有这样的文件或目录
请注意:أمكلثومxxxxxxxxثوار-ثوار.mp3
xxxxxxx这里至少有六个空格.
我尝试了urlencode(),但仍然没有结果.
有任何建议!
解决方法:
要检查$file_id是否正确,请在类似Unix的系统上执行以下操作:
echo "
\n"; // for HTML output only
system("echo -n '$file_id' | od -tx1");
使用此值,它应该是您报告的文件名(您可以执行回显检查)
$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.
标签:php,rename
来源: https://codeday.me/bug/20191009/1879302.html