我在网站上使用URL路由,这是我使用的代码:
/* TURN FULL URL INTO --> /example/example2/example3 */
function getCurrentUri()
{
$basepath = implode('/', array_slice(explode('/', $_SERVER['SCRIPT_NAME']), 0, -1)) . '/';
$uri = substr($_SERVER['REQUEST_URI'], strlen($basepath));
if (strstr($uri, '?')) $uri = substr($uri, 0, strpos($uri, '?'));
$uri = '/' . trim($uri, '/');
return $uri;
}
$base_url = getCurrentUri();
$routes = array();
$routes = explode('/', $base_url);
foreach($routes as $route)
{
if(trim($route) != ''){
array_push($routes, $route);
}
}
出于某种原因,在var_dump()
,$routes[0]
,$routes[1]
和$routes[2]
上使用$routes[3]
时会输出以下内容。这是在以下网站上:http://localhost/tutorials/
string '' (length=0)
string 'tutorials' (length=9)
string 'tutorials' (length=9)
null
如何解决此路由问题?
答案 0 :(得分:1)
如果我理解正确的话:
$routes
。explode('/', $base_url)
。''
,那么您将该字符串推送到数组的末尾。为避免这种情况,您可以使用array_pop()
代替array_push()
,并将条件从trim($route) != ''
更改为trim($route) === '' || trim($route) === null
。要从数组中删除null
元素,需要第二个条件。
或者您可以将explode('/', $base_url)
分配给不同的变量,例如$explodedUrls
并迭代它。