簡體   English   中英

我如何替換PHP URL中的字符串

[英]How can i replace a string in php url

我做了一個使用$ _GET方法的搜索框。 我搜索類別和大小。

提交類別搜索后,我的網址變為:

index.php?category=1

通過:

<li class=""><a href="index.php?category=<?php echo $category['id']; ?>"><?php echo $category['name']; ?></a></li>

提交尺寸后,我的網址是:

index.php?category=1&size=1

通過:

<li id="">
<a href="<?php echo $_SERVER['REQUEST_URI'].'&size='; ?><?php echo $size['id']; ?>"><?php echo $size['name']; ?></a>
</li>

當我搜索其他尺寸時,我有:

index.php?category=1&size=1&size=2

我該如何替換大小而不是在URL中再次添加大小?

采用

<?php echo $_SERVER['PHP_SELF'];?>

代替

<?php echo $_SERVER['REQUEST_URI'];?>

REQUEST_URI正在向您的請求添加查詢字符串。

其中PHP_SELF給出純文件名,例如index.php

您必須使用http_build_query函數從關聯的參數數組中構建URL。 並嘗試避免直接在模板中執行此操作。 將此代碼至少移到控制器級別。

// Somewhere at the controller
$category = ...;
$size = ...;
$searchParams = array();
if (!empty($category)) {
    $name = $category['name'];
    $searchParams['category'] = $category['id'];
}
if (!empty($size)) {
    $name = $size['name'];
    $searchParams['size'] = $size['id'];
}
$searchQuery = http_build_query($searchParams);

// Somehow pass it to the template
$this->addViewVar('searchUrl', $_SERVER['REQUEST_URI'] . $searchQuery); 
$this->addViewVar('searchName', $name);

在模板中,只需使用searchUrl變量:

<li class=""><a href="<?php echo $searchUrl; ?>"></a><?php echo $searchName; ?></li>

完成此任務的另一種方法是,如果沒有單獨的控制器級別,則可以創建特殊功能build_search_url()search_name()

function build_search_url($path, $category = null, $size = null) {
    $searchParams = array();
    if (!empty($category)) {
        $searchParams['category'] = $category['id'];
    }
    if (!empty($size)) {        
        $searchParams['size'] = $size['id'];     
    }        
    $searchQuery = http_build_query($searchParams);
    return $path . $searchQuery;
}

然后像這樣使用它:

<li class="">
    <a href="<?php echo build_search_url($_SERVER['REQUEST_URI'], $category, $size); ?>">
        <?php echo search_name($category, $size); ?>
    </a>
</li>

恕我直言最簡單的方法:

在$ _GET中設置索引的新值(如果您不想操縱原始數組,則為副本)–然后使用http_build_query從中創建新的查詢字符串。

您應該在“ href”標簽中調用一個函數。 在內部,使用http_build_query($ array)重建數組。

$data = array('category' => $_GET['category']);
$data['size'] = $_GET['size'] ? $_GET['size'] : NEW_SIZE;

function getQuery($data) {
     return http_build_query($data);
}

您也可以使用$ _SERVER ['REQUEST_URI'],但是我不確定此函數將替換您的項目值,而不是將其添加到查詢的末尾。

暫無
暫無

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

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