Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP: Muuttujan poistaminen osoitteesta

Tumettaja [28.08.2008 17:34:59]

#

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

Metabolix [28.08.2008 17:40:40]

#

<?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";
?>

Niko [28.08.2008 22:08:38]

#

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);
?>

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta