Мне нужно удалить знак% из имени файла или изображения в каталоге, в котором используется строка
$oldfile = "../wallpapers/temp-uploaded/".$file ; $newfile = "../wallpapers/temp-uploaded/". trim( str_replace('%', '', $file)); rename("$oldfile","$newfile");
Но его не работает ответ мне, какую строку я использую (обрезка, str_replace не работает preg_replace, как я могу использовать для удаления &% $ и т. Д. Назад
Это может быть проблемой с другими вещами, так как ваша логика кажется правильной. в первую очередь
rename("$oldfile","$newfile");
должно быть:
rename($oldfile,$newfile);
а также:
$oldfile = "../wallpapers/temp-uploaded/".$file ;
должно быть:
$oldfile = '../wallpapers/temp-uploaded/'.$file ;
так как нет необходимости в дополнительной интерполяции. Будет ускоряться. Источник: PHP Benchmark (см. «Двойные («) против одиночных («) кавычек»). И здесь .
Что касается проблемы, вам нужно сделать правильную отладку:
echo "[$oldfile][$newfile]";
выглядите как ожидалось var_dump(file_exists($oldfile),file_exists($newfile))
выводит true, false
file_get_contents($oldfile);
Работа? file_put_contents($newfile, file_get_contents($oldfile));
chmod 777
будет делать. if ( file_exists($newfile) ) { unlink($newfile); }
if ( file_exists($newfile) ) { unlink($newfile); }
поскольку вам придется удалить новый файл, если он существует, поскольку вы будете перемещаться к нему. Кроме того, вы можете добавить что-то к имени файла, если вы не хотите выполнять замену. Вы поняли эту идею. Что касается вопроса о замене.
Как вы сказали, вы хотели бы удалить значения% xx, вероятно, лучше всего их сначала декодировать:
$file = trim(urldecode($file));
Вы можете использовать регулярное выражение:
$newfile = '../wallpapers/temp-uploaded/'.preg_replace('/[\\&\\%\\$\\s]+/', '-', $file); // replace &%$ with a -
или если вы хотите быть более строгим:
$newfile = '../wallpapers/temp-uploaded/'.preg_replace('/[^a-zA-Z0-9_\\-\\.]+/', '-', $file); // find everything which is not your standard filename character and replace it with a -
\\
находятся там, чтобы избежать символа регулярного выражения. Возможно, они не нужны для всех персонажей, которых я избежал, но история доказала, что вы лучше безопасны, чем извините! 😉
$file = trim($file); $oldfile = "../wallpapers/temp-uploaded/".$file ; $newfile = "../wallpapers/temp-uploaded/".str_replace('%', '', $file); rename($oldfile,$newfile);
Чтобы заменить &%$
в имени файла (или любой строке), я бы использовал preg_replace.
$file = 'file%&&$$$name'; echo preg_replace('/[&%$]+/', '-', $file);
Это выведет file-name
. Обратите внимание, что с этим решением многие последовательные черные листы приведут к одному -
. Это особенность 😉