У меня проблема с функцией переименования php, она не работает, если имя файла в арабских словах с пробелами.
например
rename(temp/أم كلثوم ثوار - ثوار.mp3,audio/13408831061.mp3);
Нет такого файла или каталога в (путь)
обратите внимание: أم كلثومxxxxxxxxثوار - ثوار.mp3
xxxxxxx
здесь, по крайней мере, шесть пробелов.
Я попробовал urlencode()
но все равно никакого результата.
Любое предложение!
Чтобы проверить правильность вашего $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 во всем мире.
Этот образец должен помочь, я проверяю код Bellow и он работает в Windows для арабских / персидских имен:
$newname = $filename = iconv("utf-8", "cp1256","گچپژ"); echo rename("1.txt", $newname);