我需要从目录中的文件或图像名称中删除%符号 我使用哪个字符串
$oldfile = "../wallpapers/temp-uploaded/".$file ;
$newfile = "../wallpapers/temp-uploaded/". trim( str_replace('%', '', $file));
rename("$oldfile","$newfile");
但它没有用 回复我使用哪个字符串(trim,str_replace不起作用 preg_replace如何使用remove&%$等 回复
答案 0 :(得分:4)
这可能是其他事情的问题,因为你的逻辑似乎是正确的。的首先强>
rename("$oldfile","$newfile");
应该是:
rename($oldfile,$newfile);
和
$oldfile = "../wallpapers/temp-uploaded/".$file ;
应该是:
$oldfile = '../wallpapers/temp-uploaded/'.$file ;
因为不需要额外的插值。会加快速度。来源:The PHP Benchmark(参见“double(”)与single(')引号“)。here。
关于这个问题,你必须做一些正确的调试:
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); }
,因为您将不得不删除新文件(如果存在),因为您将转移到该文件。或者,如果您不想进行替换,可以在文件名中添加一些内容。你明白了。关于替换问题。
正如您所说,您希望删除%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 -
\\
可以逃避正则表达式字符。也许我逃脱的所有角色都不需要它们,但历史证明你比对不起更安全! ;-)
答案 1 :(得分:2)
$file = trim($file);
$oldfile = "../wallpapers/temp-uploaded/".$file ;
$newfile = "../wallpapers/temp-uploaded/".str_replace('%', '', $file);
rename($oldfile,$newfile);
答案 2 :(得分:0)
要替换文件名(或任何字符串)中的&%$
,我会使用preg_replace。
$file = 'file%&&$$$name';
echo preg_replace('/[&%$]+/', '-', $file);
这将输出file-name
。请注意,使用此解决方案,许多连续列入黑名单的字符只会产生一个-
。这是一个功能; - )