PHP - 如何将*(任何内容)连接到当前URL

时间:2015-04-09 09:01:54

标签: php

我遇到了问题。我使用 curPageUrl()函数找到我文件的链接,并将其用作“活跃”字样。获得一些 CSS 效果。

这是curPageUrl()代码:

function curPageURL() {
    $pageURL = 'http';
    if ($_SERVER['HTTPS'] == "on") {
        $pageURL .= "s";
    }
    $pageURL .= "://";
    if ($_SERVER['SERVER_PORT'] != "80") {
        $pageURL .= $_SERVER['SERVER_NAME'] . ":" . $_SERVER['SERVER_PORT'] . $_SERVER['REQUEST_URI'];
    } else {
        $pageURL .= $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
    }
    return $pageURL;
}

这是我的HTML代码:

<a href='home.php'><li class="<?php if (curPageUrl() == 'http://something/home.php') {echo 'active';} ?>">Home</li></a>

但问题开始时我开始使用$ _GET []方法,所以下一个链接 http://something/home.php?some_get_code不再活跃了。

如何在 home.php 之后连接所有内容,以便我的链接仍然有效

2 个答案:

答案 0 :(得分:1)

使用此:

<a href='home.php'>
    <li class="<?php if (strpos(curPageUrl(),'http://something/home.php') !== false) {echo 'active';} ?>">Home</li>
</a>

使用PHP的strpos功能。

答案 1 :(得分:0)

你正朝着错误的方向挖掘。页面的完整URL可以通过多种方式更改:查询参数,脚本名称或路径,服务器名称;更改其中任何一个,代码将失败。

尝试更简单的方法:将home.php(不是完整的网址,而只是脚本名称)与basename($_SERVER['PHP_SELF'])进行比较。

<a href='home.php'>
    <li class="<?php if (basename($_SERVER['PHP_SELF']) == 'home.php') {echo 'active';} ?>">Home</li>
</a>

函数basename()仅保留它作为参数接收的路径中的文件名(最后/之后的部分),而$_SERVER['PHP_SELF']包含调用脚本的路径处理当前请求。

此方法存在一些缺点:如果您的站点使用位于多个目录中的脚本,则它们不能具有通用名称。此外,如果您出于某种原因需要重命名'home.php',您必须记住也要更改上面的代码。

更好的方法是在'home.php'中设置一个变量并在布局文件中检查它的值:

// home.php
$page = 'home';
include 'view/home.php';


// view/home.php
<a href='home.php'>
    <li class="<?php if ($page == 'home') {echo 'active';} ?>">Home</li>
</a>

这种方式将机制与URL,服务器名称,路径,文件名或其他可能在更改时破坏它们的外部因素分离。