如何删除 php 字符串中的%符号

发布于 2024-09-10 12:27:38 字数 309 浏览 8 评论 0原文

我需要从目录中的文件或图像名称中删除 % 符号 我使用哪个字符串

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

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

但它不起作用 回复我使用哪个字符串(trim、str_replace不起作用 preg_replace 我如何用于删除 &%$ 等 回复

i need to remove % sign from file or image name in directory
which string i use

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

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

But its not work
reply me which string i use ( trim, str_replace not work
preg_replace how can i use for remove &%$ etc
reply back

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

浪荡不羁 2024-09-17 12:27:38

这可能是其他事情的问题,因为你的逻辑似乎是正确的。 首先

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

应该是:

rename($oldfile,$newfile);

并且:

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

应该是:

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

因为不需要额外的插值。会加快速度。资料来源:PHP 基准(请参阅“双引号 (”) 与单引号 (')”)。以及此处

。关于这个问题,您必须进行一些适当的调试:

  • echo "[$oldfile][$newfile]";看起来是否符合预期
  • 确保文件夹和oldfile存在
  • var_dump(file_exists($oldfile),file_exists($newfile)) 输出 true, false
  • file_get_contents($oldfile); 有效吗
  • ? code>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 -

或者如果您想要更多strict:

$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 -

\\ 用于转义正则表达式字符。也许我逃脱的所有角色都不需要它们,但历史已经证明,安全总比后悔好! ;-)

It could be an issue with other things as your logic seems correct. Firstly

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

should be:

rename($oldfile,$newfile);

and:

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

should be:

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

as there is no need for the extra interpolation. Will speed things up. Source: The PHP Benchmark (See "double (") vs. single (') quotes"). And here.

In regards to the problem, you have to do some proper debugging:

  • Does echo "[$oldfile][$newfile]"; look as expected
  • Make sure the folder and oldfile exists.
  • Does var_dump(file_exists($oldfile),file_exists($newfile)) output true, false
  • Does file_get_contents($oldfile); work?
  • Does file_put_contents($newfile, file_get_contents($oldfile));
  • Make sure you have write permissions for the folder. Typically chmod 777 will do.
  • Before the rename, perform: if ( file_exists($newfile) ) { unlink($newfile); } as you will have to delete the newfile if it exists, as you will be moving to it. Alternatively, you could append something to the filename if you do not want to do a replace. You get the idea.

In regards to the replace question.

As you have said you would like %xx values removed, it is probably best to decode them first:

$file = trim(urldecode($file));

You could use a regular expression then:

$newfile = '../wallpapers/temp-uploaded/'.preg_replace('/[\\&\\%\\$\\s]+/', '-', $file); // replace &%$ with a -

or if you want to be more strict:

$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 -

The \\ are there to escape the regex character. Perhaps they are not needed for all the characters I've escaped, but history has proven you're better safe than sorry! ;-)

你另情深 2024-09-17 12:27:38
$file = trim($file);
$oldfile = "../wallpapers/temp-uploaded/".$file ;
$newfile = "../wallpapers/temp-uploaded/".str_replace('%', '', $file);

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

rename($oldfile,$newfile);
美人如玉 2024-09-17 12:27:38

要替换文件名(或任何字符串)中的 &%$,我将使用 preg_replace。

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

这将输出文件名。请注意,使用此解决方案时,许多连续的黑名单字符将仅生成一个 -。这是一个功能;-)

To replace &%$ in the filename (or any string), I would use preg_replace.

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

This will output file-name. Note that with this solution, many consecutive blacklisted characters will result in just one -. This is a feature ;-)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文