2012-12-05 41 views
1

我想在网址末尾添加"/info"。如果"/info"已经存在,我想离开它。如何定义字符串结尾

我目前使用:

if(strpos($url, "/info") === false){ 
    $url .= "/info"; 
} 

但上面的代码只能如果该URL不会在年底含有"/"

例如:如果网址是http://www.domain.com那么它可以很好地工作,输出是http://www.domain.com/info。如果网址是http://www.domain.com/那么它显示http://www.domain.com//info

如何避免这种情况?

+0

从技术上讲,双斜杠仍然在URL中工作。 –

+0

@ChristianVarga:*技术上*,但是,这两个URL标识完全不同的资源。如果你直接从文件系统中提供服务,Apache并不太在意......但是如果你通过脚本路由URL来决定如何提供服务,'/ info'和'// info'可以表示两种不同的方式的东西。谷歌可能会认为它们是不同的。 – cHao

+0

@cHao好点,没想到。 –

回答

1

你只需要考虑到这一点。

if(substr($url, -5) != '/info') { 
    if(substr($url, -1) == "/") 
     $url.="info"; 
    else 
     $url.="/info"; 
} 

注意我修改第一if仅在网址的结尾检查'/info';如Gareth所做;)

+0

@ phant0m怎么这样? –

+0

因为它只检查'/ info'是否出现在*任何地方*。 – phant0m

+0

没错,但既然他询问一些简单的,很可能是别的东西不对劲,太;) – phant0m

3

修剪域,然后检查最后五个字符(万一“/ info”字符串出现在URL的其他地方)。

$url = rtrim($url,'/'); 
if(substr($url,-5)!='/info') $url .= '/info'; 
+0

我喜欢这个解决方案:) –

1

考虑以下网址: http://www.domain.com/info/test/

如果你在一个方式使用strpos,你会得到错误的结果。 而不是你可以使用substr和rtrim:

$url = (substr($url,-5) != '/info') ? rtrim($url, "/") . '/info' : $url; 
相关问题