Avatar billede Slettet bruger
01. oktober 2005 - 12:45 Der er 13 kommentarer og
1 løsning

Replacer i link

Jeg bruger i dag 2 replace på min side:
    $page = ereg_replace("kontakt.php", "produkter.php?lan=".$_SESSION['language'], $page);
    $page = ereg_replace("produkter.php?", "produkter.php?lan=".$_SESSION['language']."&", $page);

Da jeg umiddelbart får væsentlig flere replace, kan det lige så godt blive slået sammen i en således at følgende sker:
    $page = ereg_replace(".php", ".php?lan=".$_SESSION['language'], $page);
    $page = ereg_replace(".php?", ".php?lan=".$_SESSION['language']."&", $page);

For at det vil virke, skal det sættes i en eller anden if-sætning, da den ellers vil replace 2 gange, hvilket selvfølgelig ikke er meningen.

Hvordan gøres det lige?
Avatar billede gf Nybegynder
01. oktober 2005 - 13:06 #1
if (et eller andet == "et eller andet") {
$page = ereg_replace(".php", ".php?lan=".$_SESSION['language'], $page);
} else {
$page = ereg_replace(".php?", ".php?lan=".$_SESSION['language']."&", $page);
}

noget i den retning?

mvh gf
Avatar billede Slettet bruger
01. oktober 2005 - 13:22 #2
Ikke helt.

Den skal lave replacen uanset hvad.

Jeg har en variabel índeholden indhold på en side ($page). Et eller andet sted i denne variabel er der et link. Linket kan se ud på 2 måder:
etellerandet.php
eller
etellerandet.php?id=1

Det replacen så skal gøre, er få begge link til at se således ud:
etellerandet.php?lan=dk
eller
etellerandet.php?lan=dk&id=1
Avatar billede gf Nybegynder
01. oktober 2005 - 13:47 #3
function mySubstr2($str)// funktion der uddrager niveau af oplysninger
{
    return substr($str, strrpos($str, "=")+1);
}

$idnr = mySubstr2($page);

if(eregi("id",$page)){ $page = "etellerandet.php?lan=dk&id=".$idnr}
else {$page = "etellerandet.php?lan=dk ";}

prøv dette... Det er 100% utestet

mvh gf
Avatar billede ksoren Nybegynder
01. oktober 2005 - 14:04 #4
måske

$page = ereg_replace(".php[^\\?]", ".php?lan=".$_SESSION['language'], $page);

så matcher den kun, hvis .php ikke bliver efterfulgt af ?
Avatar billede Slettet bruger
01. oktober 2005 - 14:47 #5
gf...> Synes din løsning er for omstændig i forhold til problemet.

ksoren...> Ideén er god, men synes der mangler lidt justering.

Det korte af det lange er om der skal & efter "?lan=dk" eller ej.
Er der i forvejen et ? efter ".php" skal der & efter, er der ikke et spørgsmåltegn efter ".php", skal der ikke et &-tegn efter.
Avatar billede Slettet bruger
01. oktober 2005 - 15:42 #6
ksoren...> Jeg bliver nok nødt til at have 2 linjer, så dit forslag må være første step på vejen.

Hvordan vil en ereg_replace så se ud hvis den skal erstatte såfremt .php bliver efterfulgt af ?
Avatar billede ksoren Nybegynder
01. oktober 2005 - 15:51 #7
såfremt .php bliver efterfulgt af ?
> nøjagtig som du selv har skrevet den

Hvis du vil have én replace til at tage begge tilfælde:

function f($a){
    $ext = ($a == '?') ? "&" : $a;
    return ".php?lan=".$_SESSION['language'].$ext;
}

$page = preg_replace("/.php(.)/e", "f('$1')", $page);
Avatar billede ksoren Nybegynder
01. oktober 2005 - 15:52 #8
næ, du manger en backslash i din

$page = ereg_replace(".php\\?", ".php?lan=".$_SESSION['language']."&", $page);
Avatar billede ksoren Nybegynder
01. oktober 2005 - 15:53 #9
jeg sidder selv og sover :)

der skal backslash foran punktum

$page = preg_replace("/\\.php(.)/e", "f('$1')", $page);
Avatar billede ksoren Nybegynder
01. oktober 2005 - 15:59 #10
punktum er et wildcard, den matcher alle tegn

.php matcher derfor også aphp, bphp etc

? siger at tegnet er valgfrit

\.php? matcher derfor både .php og .ph
Avatar billede Slettet bruger
01. oktober 2005 - 16:50 #11
Hmm... hvordan gør jeg så den ikke tager mere end den skal.

Et link i min tekst kunne se sådan ud:

.......produkter.php?id=0>Produkt 1</a>
eller sådan
.....kontakt.php>Kontakt</a>

De skal efter replacen se sådan ud:
.......produkter.php?lan=dk&id=0>Produkt 1</a>
eller sådan
.....kontakt.php?lan=dk>Kontakt</a>
Avatar billede gf Nybegynder
01. oktober 2005 - 21:02 #12
det kunne evt koges ned til:
$idnr = substr($page, strrpos($str, "=")+1);
if(eregi("id",$page)){ $page = "etellerandet.php?lan=dk&id=".$idnr}
else {$page = "etellerandet.php?lan=dk ";}
Avatar billede Slettet bruger
03. oktober 2005 - 10:43 #13
gf...> Nu indeholder min $page meget mere end kun lige et link, så forslaget vil ikke kunne bruges.

Er det ikke muligt at lave noget alá:
if !(ereg_replace(".php", ".php?lan=".$_SESSION['language'], $page))
  {
    $page = ereg_replace(".php?", ".php?lan=".$_SESSION['language']."&", $page);
  }

Altså
Hvis den første ereg_replace ikke erstatter noget, så skal nummer 2 ereg_replace erstatte.
Avatar billede Slettet bruger
11. oktober 2005 - 16:07 #14
Hmmm... åbenbart ikke mere hjælp at hente her.

Lukker.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester