[PHP] Matches uit preg_replace niet bruikbaar

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb onderstaand scriptje dat in een HTML pagina alle links versleuteld, samen met nog 2 variabelen. Ik wil graag dat alle <a href="***"> tags worden gereplaced.

Het probleem is echter dat er een van de "matches" niet bruikbaar is in de functie die ik creatsring heb genoemnd. Heeft iemand een idee hoe dit wel werkend tre krijgen?

Hieronder mijn code:
Eigenlijk komt dit uit een class, ik heb de namen van de variabelen voor dit forum wat aangepast. Het gaat er dus vooral op dat de variabele $2 niet meekomt wanneer ik hem door deze functie heenhaal. Zonder die functie werkt het prima.
PHP:
1
2
3
4
5
6
7
8
9
10
function createstring($url) {
    return strtr(base64_encode(serialize(Array($item1,$item2,$url))), '+/=', '-_,');
}
    

    $html = '<a href="http://jopie.com">SJAKIE!!</a>';
    
    $str=preg_replace('#(href)="(.*)(?:")#','$1="http://server.nl/c.php?m=' . 
        createstring('$2') . "\"$3",$html);
    echo $str;


Thanks.

[ Voor 13% gewijzigd door Verwijderd op 12-01-2009 16:36 ]


Acties:
  • 0 Henk 'm!

  • storeman
  • Registratie: April 2004
  • Laatst online: 23:07
Hoe gaat dit uberhaupt werken, waar komen de $item1 en $item2 variabelen vandaan?

Daarnaast gaat de manier waarop jij preg_replace gebruikt niet werken volgens mij. Datgene wat jij wilt kun je wellicht bereiken via preg_replace_callback.

[ Voor 60% gewijzigd door storeman op 12-01-2009 16:35 ]

"Chaos kan niet uit de hand lopen"


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Eigenlijk komt dit uit een class, ik heb het voor dit forum wat aangepast.

Acties:
  • 0 Henk 'm!

  • storeman
  • Registratie: April 2004
  • Laatst online: 23:07
Verwijderd schreef op maandag 12 januari 2009 @ 16:33:
Eigenlijk komt dit uit een class, ik heb het voor dit forum wat aangepast.
Dan lijkt me de code niet erg volledig, variabelen die uit de lucht komen vallen zijn niet het meest ideaal om mee te werken, indien het uit een class komt, is het natuurlijk heel vies als deze via globals worden aangesproken, maar dan nog mis ik een een stukje code.

Het gene wat jij laat zien is onvolledig en kan nooit functioneren, maar zie mijn vorige post, daar staat wellicht wat je moet kijken.

"Chaos kan niet uit de hand lopen"


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het is gelukt met Preg_replace_callback()

Heeft iemand trouwens een beter idee om een Array via een GET variabele te versturen, zonder dat de inhoud van de array daadwerkelijk zichtbaar is? In deze oplossing kan de URL namelijk best lang worden.


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function createstring($matches) {
    $item1 = "test1";
    $item2 = "test2";
    
    $newurl = $matches[1];
    $newurl .= "http://www.test.com/track.php?code=";
    $newurl.=  strtr(base64_encode(serialize(Array($item1,$item2,$matches[2]))), '+/=', '-_,');
    $newurl.= "\"";
    return $newurl;
}
    
    $mail = '<a href="http://jopie.com">SJAKIE!!</a>';
    
    $str=preg_replace_callback('#(<a href=")(.*)(?:")#',"createstring",$mail);
    
    echo $str;

[ Voor 17% gewijzigd door Verwijderd op 12-01-2009 16:54 ]


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
preg_replace om HTML te parsen lijkt me sowieso niet ideaal, daar is bijvoorbeeld DomDocument voor (voorbeeldje). '(?:")' is trouwens gewoon '"'.

En de output van serialize gaat meestal naar een bestand (vaak bij sessies) of naar een database, niet naar de client. Ik vraag me af of het echt de bedoeling is dat je de data in de url kan veranderen. :)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • Cousin Boneless
  • Registratie: Juni 2008
  • Laatst online: 28-02 12:55
Je pattern is greedy; als je meerdere links in je $mail hebt, hou je er één over en wordt alle tekst die er tussenin staat weggepoetst.
Pagina: 1