1

我正在尝试创建一个子导航,当脚本在适当的页面和子页面上找到自己时,它会回显“当前”。

我的问题是,当$subpage == $encoded_subpage_name?"current":""比较时,带有空格的子导航名称总是相等的false,因为$encoded_subpage_name会有+$subpage不会。

<?php

    if (isset($_GET['p'])) {
        $page = $_GET['p'];
    } else {
        $page = "";
    }
    if (isset($_GET['subp'])) {
        $subpage = $_GET['subp'];
    } else {
        $subpage = "";
    }

    $subpages = array(
        "powered by company",
        "text messaging",
        "the app",
        "NFC",
        "your membership",
        "faq",
        "privacy policy",
        "terms &amp; conditions"
    );


    function buildSubNav($page, $subpages) {
        foreach ($subpages as $subpage) {
            $encoded_subpage_name = urlencode($subpage);
            echo '<li class="' . selected_subpage($encoded_subpage_name) . '"><a href="?p=' . $page . '&subp=' . $encoded_subpage_name . '"> ' . $subpage . '</a></li>';
        }
    }
    function selected_subpage($encoded_subpage_name) {
        global $subpage;
        $subpage = ($subpage);
        echo $subpage;
        return $subpage == $encoded_subpage_name?"current":"";
    }


?>
<ul>
    <?php buildSubNav($page, $subpages); ?>
</ul>
4

3 回答 3

3

您遇到的问题是您在工作的中间进行编码,而不是在实际输出时进行编码。别那样做。

于 2012-07-22T06:47:02.733 回答
2

使用urldecode

$subpage = urldecode($_GET['subp']);
于 2012-07-22T06:44:41.207 回答
1

我建议您将代码中的页面名称更改为对 URL 友好的名称(就像大多数 CMS 对其永久链接所做的那样),然后在您对其进行 URL 编码后,该字符串将保持不变。

有风格的东西:

  • 将空格替换为 -
  • 将“&”替换为“和”
  • 将 ÅÄÖ 等国际字符替换为相似字符 AAO
  • 删除所有与字母/数字字符和“-”不匹配的字符

在你的情况下,这会产生类似的东西:

$subpages = array(
    "powered-by-company",
    "text-messaging",
    "the-app",
    "NFC",
    "your-membership",
    "faq",
    "privacy-policy",
    "terms-and-conditions"
);

可能有趣的链接

于 2012-07-22T07:01:08.347 回答