簡體   English   中英

PHP:如何使用$ _GET逐字讀取參數字符?

[英]PHP: How do I use $_GET to read the parameter characters literally?

我正在嘗試創建一個在腳本在適當的頁面和子頁面上找到自身時回顯“當前”的子導航。

我的問題是,當比較$subpage == $encoded_subpage_name?"current":"" ,帶有空格的subnav名稱始終等於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>

您遇到的問題是,編碼是在工作的中間進行,而不是在實際輸出的末尾進行編碼。 別那樣做。

使用urldecode

$subpage = urldecode($_GET['subp']);

我建議您將代碼中的頁面名稱更改為URL友好名稱(就像大多數CMS使用其永久鏈接一樣),然后在對URL進行編碼之后,字符串將保持不變。

風格:

  • 用-替換空間
  • 將“&”替換為“ and”
  • 用類似的AAO替換ÅÄÖ等國際字符
  • 刪除所有與字母/數字字符和“-”不匹配的字符

在您的情況下,這會產生類似以下內容:

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

可能有趣的鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM