2012-11-24 74 views
1

这里是我的网址:使用PHP来获取URL字符串

http://www.mywebsite.com/local/cityname-free-services 

我使用

$url = $_SERVER['REQUEST_URI']; 
$check = end(explode('/local/',$url)); 
$check = strtoupper($check); 
echo $check; 

得到城市名和利用它。然而,当回声我得到这个:

CITYNAME-FREE-SERVICES 

当所有我想呼应的是:

CITYNAME 

我需要什么,在代码中只得到城市的名字改变?

此外,一些城市名称在其中有一些破折号,我需要在回显时用空格替换它们。需要添加什么?谢谢!

回答

1

你想再次爆炸的产生字符串-,并保持第一要素,沿

$url = $_SERVER['REQUEST_URI']; 
$check = end(explode('/local/',$url)); 
$check = current(explode('-', strtoupper($check))); 
echo $check; 

这样线的东西,如果最后部分的变化,你仍然有你的CITYNAME有效。

一些更多的解释,explode(文档here)将打破串入数组元素,并且它将它使用第1参数,所以在这种情况下,传递-将创建一个阵列3层的元件,打破CITYNAMEFREESERVICEScurrent(文档here)将采用数组中的当前位置并返回此值,默认情况下,当前位置位于第一个元素上。你也可以索引你阵列中的单个元素,所以explode('-', strtoupper($check))[0]也会给你CITYNAME,而使用[1][2]会给你FREESERVICES

编辑:我没有看到有关城市名称的短划线部分。由于您的网址包含您想要摆脱的其他破折号,因此这会使问题变得复杂。如果“-FREE-SERVICES”是常量并且这一直是您想要摆脱的部分,那么执行cale_b所建议的是一个好主意,它是用""替代"free-services"。所以我是+1他的答案。

编辑2:出于某种原因,我的答案被选中,用于地名与破折号你需要做一些类似cale_b建议是什么东西!

+0

+1使用'current()'。我去'array_shift(array_values())' –

+0

他提到一些城市名字中有连字符。这种情况下不会破坏吗? –

+0

事实上,我没有看到那部分,谢谢你指出 – emartel

2

几种方法之一。这里有人可能会告诉你一些正则表达式是做得更好,但这将删除“免费服务”,以及取代破折号和空格:

$url = $_SERVER['REQUEST_URI']; 
$check = end(explode('/local/',$url)); 
$check = strtoupper(str_ireplace("free-services", "", $check)); 
echo str_replace("-", " ", $check); 
0
$url = 'http://www.mywebsite.com/local/cityname-free-services'; 
$check = end(explode('/local/',$url)); 
$check = strtoupper($check); 
echo $check; // prints CITYNAME-FREE-SERVICES 
echo '<br>'; 
$first_element = strtoupper(str_ireplace(array("-free-services","-"),array(""," "),$check)); 
echo $first_element; // prints CITYNAME 
+0

他提到一些城市名称中有连字符。这种情况下不会破坏吗? –

+0

是的,这些编辑会让你每一次。 –

0
$url = $_SERVER['REQUEST_URI']; 
$check = end(explode('/local/',$url)); 
$check = strtoupper($check); 
$check = explode("-", $check); 
echo $check[0]; 
+0

他提到一些城市名字中有连字符。这种情况下不会破坏吗? –