【问题标题】:get last part of url dynamic获取 url 动态的最后一部分
【发布时间】:2019-04-30 09:29:00
【问题描述】:

我找到了一种获取网址最后一部分的方法,我只是不知道是否有更好的方法,因为我希望它是动态的。

我就是这样做的:

$url = $_SERVER['REQUEST_URI'];
$categoryName = basename($url);

在这种情况下,url 的最后一部分始终是我数据库中的类别(例如恐怖),因此 url 将始终如下所示:

http://localhost:8888/blog/public/index.php/categories/Horror

http://localhost:8888/blog/public/index.php/categories/Fantasy

我想你明白我的意思了。

好吧,问题是,有没有更好的方法或者我的方法可以吗?尤其是在看的时候

$_SERVER['REQUEST_URI']

【问题讨论】:

  • 你是指类别名称恐怖奇幻吗?
  • URL - Get last part in PHP 的可能重复项。您可以在其中看到多种方法
  • @Mohammad 这个问题是关于获取文件名,而不是 seo 友好 url 的查询字符串部分。

标签: php url


【解决方案1】:

使用explode()通过/分隔符分割URL,使用end()获取数组的最后一项。

$url = "http://localhost:8888/blog/public/index.php/categories/Horror";
$categoryName = @end(explode("/", $url));
// Horror

【讨论】:

  • 这不正是 basename() 的作用吗?
  • @ofmiceandmoon 是的,在这种情况下都返回相同的结果
  • 在这种情况下使用explode()有什么好处?
  • @ofmiceandmoon 在这种情况下它不喜欢basename(),而是另一种方法
【解决方案2】:

您始终可以使用简单的正则表达式来获取它。

$re = '@.*/(.*)@m';
$str = 'http://localhost:8888/blog/public/index.php/categories/Horror';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

echo $matches[0][1];
//outputs `Horror`

【讨论】:

  • 这不是我的意思;我知道我可以用 basename、explode 和其他方法做不同的事情;我想总是得到最后一部分,无论是“恐怖”还是“幻想”。我已经使它与$_SERVER['REQUEST_URI'] 一起工作,并想知道是否有更好的方法。
  • 好吧,你总是可以让你的http服务器为你解析它并将它作为查询字符串传递给你的index.php并从$_GET获取它
【解决方案3】:

如果您使用 laravel 或 symphony,请使用 end(Request::segments())

【讨论】:

  • 我制作了自己的框架,但很快我就要使用 Laravel,所以谢谢 :)
  • <?php $link = $_SERVER['PHP_SELF']; $link_array = explode('/',$link); echo $page = end($link_array); ?> 那就用这个核心php吧
  • 看起来像是对我的回答。 (它可能会被自动标记,因为它很短。)
猜你喜欢
  • 1970-01-01
  • 2023-02-18
  • 2013-06-14
  • 2011-11-15
  • 2013-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多