带 preg_match 的 PHP 菜单

发布于 2024-11-29 13:46:30 字数 852 浏览 0 评论 0原文

首先抱歉我的英语不好。

我在 PHP 中有这个菜单栏。我希望如果用户在页面上,当前菜单项会获得另一种颜色。我有一个有效的代码,但如果我有一个像 /item.php?id=9 这样的页面,它就不会工作。所以我用 preg_match 尝试了这个,但我无法让它工作。

菜单:

<li <?php unset($pageURL); getSelected("/index.php") ?>><a href="index.php">Home</a></li>
<li <?php unset($pageURL); getSelected("/item.php") ?>><a href="item.php">Item</a></li>
<li <?php unset($pageURL); getSelected("/more.php") ?>><a href="more.php">More</a></li>

函数 getSelected:

Function getSelected($nameURL){
$curURL =$_SERVER["REQUEST_URI"];
$pattern = "~$nameURL/.*~";
    if(preg_match($pattern, $curURL)){
        echo 'class="selected"';
        unset($curURL);
    }
    unset($curURL);
}

如何使用 preg_match 修复此问题?

谢谢你!

First sorry for my bad English.

I have this menubar in PHP. I want that if an user is on a page the current menuitem gets another color. I had a code that works, but if i have a page like /item.php?id=9 , it wont work. So i tried this with preg_match, but i can't get it to work.

Menu :

<li <?php unset($pageURL); getSelected("/index.php") ?>><a href="index.php">Home</a></li>
<li <?php unset($pageURL); getSelected("/item.php") ?>><a href="item.php">Item</a></li>
<li <?php unset($pageURL); getSelected("/more.php") ?>><a href="more.php">More</a></li>

Function getSelected:

Function getSelected($nameURL){
$curURL =$_SERVER["REQUEST_URI"];
$pattern = "~$nameURL/.*~";
    if(preg_match($pattern, $curURL)){
        echo 'class="selected"';
        unset($curURL);
    }
    unset($curURL);
}

How can i fix this with preg_match?

Thank you!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

止于盛夏 2024-12-06 13:46:30

我认为 basename()parse_url() 会执行以下操作工作。它返回 URL 的文件名:

function getSelected($nameURL){
    $currentfile = basename(parse_url($_SERVER['REQUEST_URI'],PHP_URL_PATH));
    if($currentfile === $nameURL){
        echo 'class="selected"';
    }
}

在 HTML 中,例如:

<li <?php getSelected("item.php") ?>><a href="item.php">Item</a></li>

这里不需要 RegEx。

I think basename() in combination with parse_url() would do the job. It returns the filename of an URL:

function getSelected($nameURL){
    $currentfile = basename(parse_url($_SERVER['REQUEST_URI'],PHP_URL_PATH));
    if($currentfile === $nameURL){
        echo 'class="selected"';
    }
}

And in HTML e.g.:

<li <?php getSelected("item.php") ?>><a href="item.php">Item</a></li>

No need for RegEx here.

痞味浪人 2024-12-06 13:46:30

在这种情况下,仅使用 php 字符串函数会更快(CPU 周期)且更容易(编码)。

if (stripos($curURL, $pattern) !== false) {
  echo 'class="selected"'
}

It is faster (CPU cycles) and easier (coding) in this situation to just use a php string function.

if (stripos($curURL, $pattern) !== false) {
  echo 'class="selected"'
}
暮色兮凉城 2024-12-06 13:46:30

它可能是 $pattern 中的尾随 /。尝试替换

$pattern = "~$nameURL/.*~";

$pattern = "~$nameURL/?.*~";

另外,我不确定,但你最好在 getSelected 调用中转义 . ,因为使用你的模式 /itemdphp 也会匹配。

It might be the trailing / in $pattern. Try replacing

$pattern = "~$nameURL/.*~";

with

$pattern = "~$nameURL/?.*~";

Also, I'm not sure, but you'd better escape the . in your getSelected calls, because with your pattern /itemdphp will match too.

執念 2024-12-06 13:46:30

您可以使用类似的内容

$pattern = $nameURL . '$/';
preg_match($pattern, $_SERVER['SCRIPT_FILENAME']);

因为前面已经有一个 /

You can use something like

$pattern = $nameURL . '$/';
preg_match($pattern, $_SERVER['SCRIPT_FILENAME']);

Because you already have a / in the front .

尹雨沫 2024-12-06 13:46:30

首先,没有理由多次取消设置变量。只需在开始时执行一次:

<?php unset($pageURL);?>
<li <?php getSelected("/index.php") ?>><a href="index.php">Home</a></li>
<li <?php getSelected("/item.php") ?>><a href="item.php">Item</a></li>
<li <?php getSelected("/more.php") ?>><a href="more.php">More</a></li>

然后在函数中尝试以下正则表达式:

$pattern = "/\/$nameURL(.*)/";

getSelected('item.php' ) 将匹配,例如 /item.php/item.php?something=stuff&othervar=lollipop

First, there is no reason to unset a variable so many times. Just do it once at the beginning:

<?php unset($pageURL);?>
<li <?php getSelected("/index.php") ?>><a href="index.php">Home</a></li>
<li <?php getSelected("/item.php") ?>><a href="item.php">Item</a></li>
<li <?php getSelected("/more.php") ?>><a href="more.php">More</a></li>

Then try the following regex in your function:

$pattern = "/\/$nameURL(.*)/";

getSelected('item.php') will match, for example, /item.php or /item.php?something=stuff&othervar=lollipop

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文