【问题标题】:Replace value within the string with specified keyword in PHP用PHP中的指定关键字替换字符串中的值
【发布时间】:2015-07-24 16:44:04
【问题描述】:

我有这个字符串

../../some/folder/image.png

字符串可能是

../../../../../../some/folder/image.png

我想删除所有 ../ 并在some/folder/image.png 前面添加 /root/folder/。 我该怎么做?

编辑

有时那个字符串会放在中间。我的意思是它可能是这样的:

hallo hallo ../../../some/folder/image.png.

【问题讨论】:

  • 我可以看到这是怎么回事,但是如果您开始包含不同的字符集等,您将无法达到这样的安全环境。我建议您不要在 URL 中传递它,而是应该通过仅命令名称,例如“ParentFolder”并仅在服务器端计算目标路径。

标签: php string replace


【解决方案1】:

您可以执行以下操作:

$path = "hello lol ../../some/folder/image.png";
$path = preg_replace("#.*\.\./#", "", $path);
$path = "/root/folder/" . $path;

【讨论】:

  • 问题是有时字符串被放在了中间。我的意思是它可能是这样的:hallo hallo ../../../some/folder/image.png。你的解决方案会变成这样:/root/folder/hallo hallo some/folder/image.png
  • 编辑了我的答案以匹配你想要的。
  • 有时它会删除../../,但/root/folder/会添加到像/root/folder/hello lol some/folder/image.png这样的字符串之前。我想要的是hello lol /root/folder/some/folder/image.png
  • 我重新发布了我的解决方案,无论之前的字符串如何,它都应该可以工作
【解决方案2】:

取决于你想在哪里使用它,但你会做这样的事情

$path = "../../../../../some/folder/image.png";
$searchFor = substr($path, 0, strpos( $path, "some"));

$path = str_replace($searchFor, "/root/folder/", $path);

我知道 preg_replace() 更好,但我想分享一个不同的答案

【讨论】:

  • 它不起作用,如果../ 字符串出现多次,它会将../ 替换为/root/folder/multiple 次。
  • @Timur 但它不会用/root/folder/ 替换每个人../,是吗?所以换句话说,如果我有这个../../../some/folder/image.png,它将生成三个/root/folder/,字符串将是/root/folder//root/folder//root/folder/root/folder/some/folder/image.png?
猜你喜欢
  • 2014-10-07
  • 1970-01-01
  • 1970-01-01
  • 2011-01-07
  • 1970-01-01
  • 2022-01-15
  • 2021-06-21
  • 2018-09-11
  • 2014-03-06
相关资源
最近更新 更多