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=spagetti
Ongelmana 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.