PHP URL分割

6
我想从我的URL中获取产品。例如:
http://www.website.com/product-category/iphone

我想抓取iPhone的信息,对于我的代码来说这是可以的。但是我有一个下拉菜单来排序产品,当被点击后会改变URL并添加一个查询,比如:

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 部分。

谢谢


产品名称是否总是跟随 /product-category/? - Matt
3个回答

7
你可以使用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];

更新(由 @x4rf41 指出,使用 strrchr()):
获取字符串末尾的更简短方法,与 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), '/');

2
更短的代码是 $endofurl = strrchr(parse_url($url, PHP_URL_PATH),'/'); - x4rf41

5
如果你想获取数组的最后一个元素,可以使用 end 函数。你的其他代码似乎是有效的。
$endofurl = end($r);

你也可以利用parse_urlstrrchr函数使其更简洁:

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

4

我已经明白了。现在可以与之配合使用。

$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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接