Davs
> Jeg har et stort behov for at kunne kalde en side med samme sæt
> parametre i querystringen, MEN ændre en enkelt af dem.
>
> til det formål har jeg lavet en lille funktion:
>
> # setVal tager et variabelnavn og giver det en medsendt værdi i den
> URI-string som medsendes
> function setVal($var, $vaerdi, $rside){
> #tager var-navn, værdi og rside fx setVal("&u2",$u2,$rside)
> # NB! tager pt kun int-værdier!
> if (!stristr($rside, $var)){ # hvis variablen ikke findes
> $rside .= "$var=$vaerdi";
> } else {
> $rside = ereg_replace("($var=[[:digit:]]{1,3})", "$var=$vaerdi",
$rside);
> }
> return $rside;
> }
>
> men - den er ikke særligt god fordi jeg ikke er ret god til regex (jeg
> har lidt svært ved at fange syntaksen og jeg synes ikke at tingene gør
> som jeg forventer ud fra dokumentationen - og ja - jeg tester på lukkede
> sider hvor der ikke er andet til at påvirke.)
>
> Den kan pt kun finde ud af det hvis værdien er et tal - jeg ville gerne
> kunne arbejde med bogstavværdier også... Egentlig er funktionen simpel:
> find strengen "&varNavn=**" og udskift stjernerne - dvs alt indtil næste
> "&" med den medsendte værdi...
>
> Jeg håber at nogen vil hjælpe mig - jeg er kørt lidt fast
>
> Det er på siderne
> <
http://cepheus.nat.sdu.dk/IT-Vest/kurser.php?id=6&k=1&Sem=FS2002&p=2>
>
> venligst
>
> Jesper Brunholm
Du får lige et svar, som slet ikke har noget med noget at gøre... det har i
hvert fald ikke noget med ereg at gøre. Jeg har lavet (er ved at lave) en
klasse, som skal kunne gøre det samme.
Du laver et url-object ved at skrive $bla = new cURL(en url med nogle
options), og så kan du expande den i vildskab, f.eks.
$bla->expand("Hej=fætter") eller med vilkårligt mange argumenter
$bla->expand("Hej=fætter", "har=du", "det=godt", "Farvel=fætter").
class cURL
{
var $theURL;
//
Constructor ----------------------------------------------------------------
------------
function cURL($URL = "")
{
$this->theURL = $URL;
}
// Methods the extend or contract the
link ------------------------------------------------
function expand()
{
// Seperate the url from the querystring and make an assoc. array from
the querystring
$url = strtok($this->theURL, "?");
$querystring = strtok("?");
$exploded_querystring = explode("&", $querystring);
$querystring_array = array();
foreach ($exploded_querystring as $expansion)
{
$key = strtok($expansion, "=");
$value = strtok("=");
$querystring_array[$key] = $value;
}
// Run through the expansions and update
$expansion_array = func_get_args();
foreach ($expansion_array as $expansion)
{
$key = strtok($expansion, "=");
$value = strtok("=");
$querystring_array[$key] = $value;
}
// Create the new url
$i = 0;
while ( list($key, $value) = each($querystring_array) )
{
$url .= (( $i++ == 0 ) ? "?" : "&").$key."=".$value;
}
return $url;
}
function contract()
{
}
// Get
function -------------------------------------------------------------------
--------
function get()
{
return $this->theURL;
}
function self()
{
global $QUERY_STRING;
$url = new cURL($this->get());
$exploded_querystring = explode("&", $QUERY_STRING);
foreach ($exploded_querystring as $expansion)
{
$url = new cURL($url->expand($expansion));
}
return $url->get();
}
}
Funktionen til at fjerne en option fra url'en mangler, men metoden expand
gør vist det du gerne vil... men det er jo meget kode i forhold til din
løsning :)