PHP用str_replace()替换URL段;

我的域名后面有“/ foo / bar / url /”</ code> 。</ p>

我想要的是在我的字符串中找到倒数第二个斜杠符号,并用斜杠符号+ hashtag替换它。 像这样:从 / </ code>到 /#</ code>(问题不在于如何获取URL,而是如何处理它)</ p>

如何 这可以实现吗? 做这样的事情的最佳做法是什么?
目前我非常确定我应该使用str_replace(); </ p>

UPD。 我认为 preg_replace()</ code>适合我的情况。 但是还有另一个问题:为了让我的问题得到解决,regexp应该是什么样的?</ p>

P.S。 在我正在使用 SilverStripe </ code>框架( v3.1.12 </ strong>)</ p>
</ div>的情况下

展开原文

原文

I have "/foo/bar/url/" coming straight after my domain name.

What I want is to find penultimate slash symbol in my string and replace it with slash symbol + hashtag. Like so: from / to /# (The problem is not how to get URL, but how to handle it)

How this could be achieved? What is the best practice for doing stuff like that? At the moment I'm pretty sure that I should use str_replace();

UPD. I think preg_replace() would be suitable for my case. But then there is another problem: what should regexp look like in order to make my issue solved?

P.S. Just in a case I'm using SilverStripe framework (v3.1.12)

dptdb84606
dptdb84606 哦。也许$m=爆炸($link,'/');$m[count($m)-1]=“#”。$m[count($m)-1];内爆($m,'/');
大约 5 年之前 回复
dongme8388
dongme8388 $link=$this->Link();它返回字符串像/foo/bar/url/我想像这样处理它:/foo/bar/#url和link可能有更多的URL段(我不是说肯定只有三段就像在我的例子中一样,基本上可能有超过3个,或少于3个)。
大约 5 年之前 回复
dp13668681869
dp13668681869 问题是,我知道如何获取字符串,我遇到了用我的模式替换倒数第二个斜杠的问题。为什么我告诉你我正在使用SilverStripe框架和其他可能与我的帖子无关的东西-因为我可能还不知道SilverStrtipe内置功能。所以也许有更简单的方法来实现我想要的,而不使用自定义的PHP代码。
大约 5 年之前 回复
dongye7231
dongye7231 比如$uri。“#”?这似乎太容易了。
大约 5 年之前 回复
duancheng8000
duancheng8000 “问题不在于如何获取URL,而是如何处理它”我对你需要的东西感到困惑。
大约 5 年之前 回复

5个回答



  $ url ='/ foo / bar / url /'; 

if(false!== $ last = strrpos($ url,'/')){
if(false!== $ penultimate = strrpos($ url,'/',$ last - strlen($ url) - 1)){
$ url = substr_replace ($ url,'/#',$ penultimate,1);
}
}

echo $ url;
</ code> </ pre>

这将输出</ p>

  / foo / bar /#url / 
</ code> </ pre>

如果你想剥去最后的 / </ code>:</ p>

  echo rtrim($ url,'/');  // print / foo / bar /#url 
</ code> </ pre>
</ div>

展开原文

原文

$url = '/foo/bar/url/';

if (false !== $last = strrpos($url, '/')) {
    if (false !== $penultimate = strrpos($url, '/', $last - strlen($url) - 1)) {
        $url = substr_replace($url, '/#', $penultimate, 1);
    }
}

echo $url;

This will output

/foo/bar/#url/

If you want to strip the last /:

echo rtrim($url, '/'); // print /foo/bar/#url

dongluxin6711
dongluxin6711 是的,谢谢! 这就像一个魅力。
大约 5 年之前 回复

Assuming you now have

$url = $this->Link(); // e.g. /foo/bar/my-urlsegment

You can combine it like

$handledUrl = $this->ParentID 
    ? $this->Parent()->Link() + '#' + $this->URLSegment
    : $this->Link();

where $this->Parent()->Link() is e.g. /foo/bar and $this->URLSegment is my-urlsegment

$this->ParentID also checks if we have a parent page or are on the top level of SiteTree



我可能因为回答这个问题而迟到了,但我认为这可能会对你有所帮助。 你可以简单地使用 preg_replace </ code>,如</ p>

  $ url ='/ foo / bar / url /'; 
echo preg_replace('〜(\ / )(\ W +)\ / $〜”, “$ 1#$ 2”,$网址);
</代码> </ PRE>

<强>输出:</强> </ p >

  / foo / bar /#url 
</ code> </ pre>
</ div>

展开原文

原文

I might be tooooo late for answering this question but I thought this might help you. You can simply use preg_replace like as

$url = '/foo/bar/url/';
echo preg_replace('~(\/)(\w+)\/$~',"$1#$2",$url);

Output:

/foo/bar/#url



这是一个可以运行的方法。 可能有更简洁的方法。</ p>

  //假设你已经填充了$ url_string 
$ url_string =“http://whatever.com/foo/bar/url/ “;

$ url_explode = explode(”\“,$ url_string);
$ portion_count = count($ url_explode);

$ affected_portion = $ portion_count - 2; //减去2,因为数组索引从0开始,我们也希望第二次出现n
$ n = 0;
$ output =“”;
foreach($ url_explode as $ part){

$ output。= $ portion;

if if($ i == $ affected_portion){
$ output。=“#”;
}

$ i ++;

}

$ new_url = $ output;
</ code> </ pre>
</ div>

展开原文

原文

Here is a method that would function. There are probably cleaner ways.

// Let's assume you already have $url_string populated
$url_string = "http://whatever.com/foo/bar/url/";

$url_explode = explode("\\",$url_string);
$portion_count = count($url_explode);

$affected_portion = $portion_count - 2; // Minus two because array index starts at 0 and also we want the second to last occurence

$i = 0;
$output = "";
foreach ($url_explode as $portion){

    $output.=$portion;

    if ($i == $affected_portion){
        $output.= "#";
    }

    $i++;

}

$new_url = $output;

In my case this solved my problem:

$url = $this->Link();
$url = rtrim($url, '/');
$url = substr_replace($url, '#', strrpos($url, '/') + 1, 0);
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问