php url爆炸

时间:2013-02-27 17:09:58

标签: php arrays url explode

我想从我的网址抓取我的产品。例如:

http://www.website.com/product-category/iphone

我想抓住iphone,这对我的代码很好,但我有一个下拉列表来排序产品,点击后会更改网址并添加如下查询:

http://www.website.com/product-category/iphone?orderby=popularity
http://www.website.com/product-category/iphone?orderby=new
http://www.website.com/product-category/iphone?orderby=price
http://www.website.com/product-category/iphone?orderby=price-desc

我目前的代码是

$r = $_SERVER['REQUEST_URI']; 
$r = explode('/', $r);
$r = array_filter($r);
$r = array_merge($r, array()); 

$endofurl = $r[1];
echo $endofurl;

如何一直抓住iphone部分。

干杯

3 个答案:

答案 0 :(得分:6)

您可以使用PHP的parse_url()函数为您分割URL,然后访问path参数并结束它:

$r = parse_url($url);
$endofurl = substr($r['path'], strrpos($r['path'], '/'));

这将解析URL,然后从路径中最后找到的/开始,获取URL的“子字符串”。

您也可以在路径上使用explode('/')

$path = explode($r['path']);
$endofurl = $path[count($path) - 1];

更新(使用strrchr(),@ x4rf41指出):
substr() + strrpos()相对的获取字符串结尾的较短方法是使用strrchr()

$endofurl = strrchr($r['path'], '/');

如果您利用parse_url()的选项参数,您还可以使用PHP_URL_PATH来获取仅路径 $ r = parse_url($ url,PHP_URL_PATH);

或者,最短的方法:

$endofurl = strrchr(parse_url($url, PHP_URL_PATH), '/');

答案 1 :(得分:5)

如果要检索数组的最后一个元素,可以使用end函数。其余代码似乎正在运行。

$endofurl = end($r);

您还可以利用parse_urlstrrchr函数使其更简洁:

$endofurl = strrchr(parse_url($url, PHP_URL_PATH), '/');

答案 2 :(得分:2)

刚想通了。现在可以使用

$r = $_SERVER['REQUEST_URI']; 
$r = explode('/', $r);
$r = array_filter($r);
$r = array_merge($r, array()); 
$r = preg_replace('/\?.*/', '', $r);

$endofurl = $r[1];
echo $endofurl;