用php删除部分网址

时间:2012-04-10 23:26:32

标签: php url path relative

关于添加到网址的值,我看过很多帖子,但网址本身没有。

我正在使用WordPress插件(上帝这个标记很难过)并尝试从变量中删除部分目录,因为我正在使用一些htaccess魔法来重写客户端根目录。无论如何,这就是重点。

试图改变这一点:

href="/wp-content/themes/tray/img/celebrity_photos/photo.jpg"

成:

href="/img/celebrity_photos/photo.jpg"

所以我只是想从网址中删除 /wp-content/themes/tray/

这是插件的PHP代码,它为每个锚路径构建一个变量:

$this->imageURL = '/' . $this->path . '/' . $this->filename;

所以我想说:

$this->imageURL = '/' . $this->path -/wp-content/themes/tray/ . '/' . $this->filename;

PHP substr()strpos()?谢谢你的帮助!

3 个答案:

答案 0 :(得分:3)

鉴于:

$this->imageURL = '/' . $this->path . '/' . $this->filename;
$remove = "/wp-content/themes/tray";

这是删除已知前缀的方法,如果它存在:

if (strpos($this->imageURL, $remove) === 0) {
    $this->imageURL = substr($this->imageURL, strlen($remove));
}

如果您某些它始终存在,那么您也可能会失去if条件。

答案 1 :(得分:2)

这是一个选择:

$h="/wp-content/themes/tray/img/celebrity_photos/photo-on-4-6-12-at-3-23-pm.jpg";

$prefix="/wp-content/themes/tray/";

print str_replace($prefix, "/", $h, 1);

它有一个主要缺陷,即它不会将自己固定在$h的左侧。要做到这一点,您需要使用正则表达式(处理时较重)或者在运行str_replace()之前将其包装在检测前缀位置的内容中。

$h="/wp-content/themes/tray/img/celebrity_photos/photo-on-4-6-12-at-3-23-pm.jpg";

$prefix="/wp-content/themes/tray/";

if (strpos(" ".$h, $prefix) == 1)
  $result = str_replace($prefix, "/", $h, 1);
else
  $result = $h;

print $result;

请注意这个重要元素:前缀以斜杠结尾。你不想匹配其他主题,如“trayn”或“traypse”。注意为您的特定用例编写内容。总是试图找出代码可能会如何破解,并围绕有问题的假设用例进行编程。

答案 2 :(得分:1)

试试这个:

$href = str_replace("/wp-content/themes/tray","",$href);

或者在您的具体案例中,如下所示:

$this->imageURL = '/' . str_replace("/wp-content/themes/tray/","",$this->path) . '/' . $this->filename;