4

?sortPHP では、投稿を昇順または降順で並べ替えるための URL セグメントを追加しています。

    <?php
    //get current URL
    $url = "http://" . $_SERVER['HTTP_HOST']  . $_SERVER['REQUEST_URI'];

    //filter URL and create sorting links
    if(filter_var($url, FILTER_VALIDATE_URL))
    { ?>         
      <a href="<?php echo $url; ?>?sort=asc">Small</a>
      <a href="<?php echo $url; ?>?sort=desc">Large</a>
    <?php } ?>

問題: リンクをクリックするたびに、URL セグメントが URL で繰り返されます。

例:http://mysite.com/another_segment/?sort=asc?sort=asc?sort=asc

繰り返しを禁止するには、2 つの並べ替えリンクのいずれかをクリックするたびに URL セグメントを置き換える方法を教えてください。パラメータを&記号で区切る必要はありません。区切り文字は 1 つだけだと思います。ページネーションスクリプトで使用しているため、ページを閲覧するときにパラメーターをURLに残す必要があります。

私もjavascriptを避けようとしています

4

5 に答える 5

3

次の関数を使用して、既存の URL の「並べ替え」キーを削除してから追加する必要があります。

function remove_querystring_var($url, $key) { 
  $url = preg_replace('/(.*)(?|&)' . $key . '=[^&]+?(&)(.*)/i', '$1$2$4', $url . '&'); 
  $url = substr($url, 0, -1); 
  return $url; 
}

コードはこのように変更する必要があります

   <?php
    //get current URL
    $url = "http://" . $_SERVER['HTTP_HOST']  . $_SERVER['REQUEST_URI'];
     $url = remove_querystring_var($url, "sort");
    //filter URL and create sorting links
    if(filter_var($url, FILTER_VALIDATE_URL))
    { ?>         
      <a href="<?php echo $url; ?>?sort=asc">Small</a>
      <a href="<?php echo $url; ?>?sort=desc">Large</a>
    <?php } ?>
于 2012-06-09T00:28:33.950 に答える
2

クエリ文字列を削除し、追加し$urlて再構築$_GETします。&

$url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

// Strip the query string from URL
list($url,) = explode('?', $url);

// Remove 'sort' from querystring if exist
if (isset($_GET['sort']))
    unset($_GET['sort']);

// Rebuild query string, append with '&'
$url .= '?'. http_build_query($_GET).(count($_GET) ? '&' : '');

if (filter_var($url, FILTER_VALIDATE_URL))
{ ?>         
    <a href="<?php echo $url; ?>sort=asc">Small</a>
    <a href="<?php echo $url; ?>sort=desc">Large</a>
<?php } ?>

このようにして、クエリ文字列パラメーターを含む URL を 1 つだけ持つことができますsort=asc|desc

http://example.com/some/path?page=1&last=1500&sort=asc
http://example.com/some/path?page=1&last=1500&sort=desc
于 2012-06-09T01:11:57.020 に答える
1

からクエリ文字列を削除するには$_SERVER['REQUEST_URI']、 を使用します$URI = strstr($_SERVER['REQUEST_URI'], "?", true);

参考:php.net ;

于 2012-06-09T00:21:57.877 に答える
1
<?php

$get_asc = $get_desc = $_GET;
$get_asc['sort'] = 'asc';
$get_desc['sort'] = 'desc';

if(filter_var($url, FILTER_VALIDATE_URL)) { ?> 
    <a href="<?php echo $url . '?' . http_build_query($get_asc); ?>">Small</a>
    <a href="<?php echo $url . '?' . http_build_query($get_desc); ?>">Large</a>
<?php } ?>
于 2012-06-09T00:51:55.110 に答える
0

$_SERVER['SCRIPT_NAME']の代わりに使ってみてくださいREQUEST_URI

于 2012-06-09T00:20:30.993 に答える