我的"/foo/bar/url/"
直接来自我的域名。
我想要的是在我的字符串中找到倒数第二个斜杠符号,并用斜杠符号+ hashtag替换它。像这样:从/
到/#
(问题不在于如何获取网址,而是如何处理网址)
如何实现这一目标?做这样的事情的最佳做法是什么? 目前,我非常确定我应该使用str_replace();
UPD。我认为preg_replace()
适合我的情况。但是还有另外一个问题:为了让我的问题得到解决,regexp应该是什么样的?
P.S。我只是在使用SilverStripe
框架( v3.1.12 )
答案 0 :(得分:1)
这是一个可以运作的方法。可能有更简洁的方法。
// 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;
答案 1 :(得分:1)
$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;
这将输出
/foo/bar/#url/
如果你想剥去最后一个/
:
echo rtrim($url, '/'); // print /foo/bar/#url
答案 2 :(得分:1)
假设你现在有
$url = $this->Link(); // e.g. /foo/bar/my-urlsegment
你可以像
一样组合它$handledUrl = $this->ParentID
? $this->Parent()->Link() + '#' + $this->URLSegment
: $this->Link();
其中$this->Parent()->Link()
例如是 / foo / bar 和$this->URLSegment
是 my-urlsegment
$this->ParentID
还会检查我们是否有父网页或是否位于SiteTree的顶层
答案 3 :(得分:1)
我回答这个问题可能太晚了,但我认为这可能会对你有所帮助。您可以像{/ p>一样使用preg_replace
$url = '/foo/bar/url/';
echo preg_replace('~(\/)(\w+)\/$~',"$1#$2",$url);
<强>输出:强>
/foo/bar/#url
答案 4 :(得分:0)
在我的情况下,这解决了我的问题:
$url = $this->Link();
$url = rtrim($url, '/');
$url = substr_replace($url, '#', strrpos($url, '/') + 1, 0);