Как удалить% -sign в строке php

Мне нужно удалить знак% из имени файла или изображения в каталоге, в котором используется строка

$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
  • Does file_get_contents($oldfile); Работа?
  • Does 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 . Обратите внимание, что с этим решением многие последовательные черные листы приведут к одному - . Это особенность 😉