Как удалить% -знак в строке php - PullRequest
3 голосов
/ 18 июля 2010

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

$oldfile = "../wallpapers/temp-uploaded/".$file ;
$newfile = "../wallpapers/temp-uploaded/". trim( str_replace('%', '', $file));

rename("$oldfile","$newfile");

Но это не работа ответьте мне, какую строку я использую (trim, str_replace не работает preg_replace, как я могу использовать для удаления &% $ и т. д. ответить назад

Ответы [ 3 ]

4 голосов
/ 18 июля 2010

Это может быть проблемой с другими вещами, поскольку ваша логика кажется правильной. Во-первых

rename("$oldfile","$newfile");

должно быть:

rename($oldfile,$newfile);

и:

$oldfile = "../wallpapers/temp-uploaded/".$file ;

должно быть:

$oldfile = '../wallpapers/temp-uploaded/'.$file ;

поскольку нет необходимости в дополнительной интерполяции.Ускорит вещи.Источник: Тест PHP (См. "Двойные (") и одинарные (') кавычки "). И здесь .

В отношениипроблема, вы должны сделать некоторую правильную отладку:

  • выглядит ли echo "[$oldfile][$newfile]"; как ожидалось
  • Убедитесь, что папка и старый файл существуют.
  • делаетvar_dump(file_exists($oldfile),file_exists($newfile)) output true, false
  • Работает ли file_get_contents($oldfile);?
  • Работает ли file_put_contents($newfile, file_get_contents($oldfile));
  • Убедитесь, что у вас есть права на запись для папки. Обычно chmod 777 будетdo.
  • Перед переименованием выполните: 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 -

\\ здесь, чтобы избежать символа регулярного выражения.Возможно, они не нужны всем персонажам, которых я сбежал, но история доказала, что вы в большей безопасности, чем потом сожалеете!;-)

2 голосов
/ 18 июля 2010
$file = trim($file);
$oldfile = "../wallpapers/temp-uploaded/".$file ;
$newfile = "../wallpapers/temp-uploaded/".str_replace('%', '', $file);

rename($oldfile,$newfile);
0 голосов
/ 18 июля 2010

Чтобы заменить &%$ в имени файла (или любой строке), я бы использовал preg_replace.

$file = 'file%&&$$$name';
echo preg_replace('/[&%$]+/', '-', $file);

Это выдаст file-name. Обратите внимание, что при таком решении многие подряд расположенные в черном списке символы приводят к одному -. Это особенность; -)

...