PHP rename failed for filename with utf-8 arabic charset string

a 夏天 提交于 2019-12-19 10:53:44

问题


I have an issue with php rename function, it fail if file name is in Arabic words with spaces.

e.g.

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

No such file or directory in (path)

please note: أم كلثومxxxxxxxxثوار - ثوار.mp3

xxxxxxx here atleast six spaces.

I tried urlencode() but still no result.

Any suggestion!


回答1:


To check that your $file_id is correct, do this on a Unix-like system:

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

With this value, which should be your reported filename (you can do an echo to check)

$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";

the output is

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

(as you can see, the sequence ending with a B1 repeats itself, the last 4 bytes are .mp3)

In the directory where the file should be you can issue a

ls -1 | od -tx1

and you will see all filenames separated by 0a which are newlines.

If both outputs match, the problem is somewhere in PHP or in the system (both unlikely), if they don't you will have to chase the problem in your code, starting from the encoding, which must be UTF-8 everywhere.




回答2:


This Sample Should Helps , I Test Bellow Code And It Works In Windows For Arabic/Persian Names:

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


来源:https://stackoverflow.com/questions/11243863/php-rename-failed-for-filename-with-utf-8-arabic-charset-string

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!