Olen tekemässä skriptilleni funktiota jolla pystyy helposti poistamaan halutun
muuttujan nykyisestä osoitteesta.
// nykyinen osoite
http://www.sivu.com/index.php?elain=koira&auto=volvo&ruoka=spagetti
poistamuuttuja("auto");
// kun funktiota on käytetty osoitteen tulisi näyttää tältä:
http://www.sivu.com/index.php?elain=koira&ruoka=spagettiOngelmana on nyt se, että en ole keksinyt tapaa, jolla pystyisi poistamaan tuon muuttujan nätisti ilman että muut osoitteen muuttujat menisivät sekaisin. Jos esimerkiksi poistaa tuon 'auto' muuttujan pelkällä str_replacella, ei homma toimi, koska osoitteeseen voisi jäädä ylimääräisiä &-merkkejä yms.
Auttakaas tyhmää :P
<?php // Katkaistaan kysymysmerkin kohdalta $osat = explode("?", $osoite, 2); $alku = $osat[0]; $loppu = isset($osat[1]) ? $osat[1] : ""; // Kerätään muuttujat talteen, erottimena & $muuttujat = array(); if (!empty($loppu)) foreach (explode("&", $loppu) as $muuttuja) { // Otetaan muuttujasta avain ja arvo erilleen, erottimena = list($avain, $arvo) = explode("=", $muuttuja, 2); // Lisätään taulukkoon $muuttujat[$avain] = $arvo; } // Poistetaan taulukosta tietty muuttuja unset($muuttujat["auto"]); // Muutetaan taulukon muuttujat taas muotoon avain=arvo, huomaa & (&$arvo) foreach ($muuttujat as $avain => &$arvo) { $arvo = "$avain=$arvo"; } // Yhdistetään muuttujat $loppu = implode("&", $muuttujat); // Tehdään osoite; jos $loppu on tyhjä, ei laiteta sitä eikä kysymysmerkkiä $osoite = empty($loppu) ? $alku : "$alku?$loppu"; ?>
Tai sitten tyyliin
<?php $url = parse_url('http://www.sivu.com/index.php?elain=koira&auto=volvo&ruoka=spagetti'); parse_str($url['query'], $x); unset($x['auto']); $url = 'http://www.sivu.com/index.php?' . http_build_query($x); ?>
Aihe on jo aika vanha, joten et voi enää vastata siihen.