auch regexp :-)

rasputin

Lounge-Member
ich möchte an alle links die session id dranhängen...
also
<a href="index.php" target="main"> sollte dann so aussehen
<a href="index.php?sid=3idia03oasusw" target="main"> und
<a target="main" href="index.php?cat=news&page=3" name="einLink"> sollte so aussehen:
<a target="main" href="index.php?cat=news&page=3&sid=3idia03oasusw" name="einLink">
noch komplizierter:
<a target="main" href="index.php?cat=news#23" name="einLink">
<a target="main" href="index.php?cat=news&sid=3idia03oasusw#23" name="einLink">
PHP:
$template = preg_replace('/regexp/', '//1'.session_name().'='.session_id().'//2', $template);
von regexp habe ich so gut wie keine ahnung... das ganze wird kompliziert, weil manchmal ein '?' und manchmal ein '&' an den link angehängt wird, zudem kanns ein '#' enthalten(das am ende sein muss)...
 
spontan würd ich sagen
[untested]
..... "/href=\"([^\"]*)(\")/", "\\1&".session_gedönz."\"" .....
[/untested]
Fängt allerdings nicht die Geschichte ab, daß kein ? enthalten ist.
 
danke funzt soweit auch.
PHP:
preg_replace('/href=\"([^\"]*)(\")/', 'href="$1?'.session_name().'='.session_id().'$2', $s);
<a href="index.php" target="_blank">asd</a>
<a href="index.php?sid=b9309b767a70cf9796866e7656076559" target="_blank">asd</a>
<a href="index.php?cat=news#2342346" target="_blank">asd</a><br>
<a href="index.php?cat=news#2342346?sid=b9309b767a70cf9796866e7656076559" target="_blank">asd</a>
<a href="http://www.google.ch" target="_blank">google</a>
<a href="http://www.google.ch?sid=b9309b767a70cf9796866e7656076559" target="_blank">google</a>
wie fragt man noch die sonderfälle mit '#', oder wenn schon ein '?' enthalten ist, ab
 
ich denke, ich habe eine möglichkeit gefunden:
man lässt nach 'href="' suchen, dann bis ein (oder kein) '?' kommt und ersetzt dieses mit '?sessionstring&' danach folgen die restlichen angaben über die url. aber irgendwie funktioniert mein versuch nicht...
PHP:
preg_replace('/href=\"[^(?:https?|ftp):\\/\\/]([^\"]*\\??)([^\"])(\")/', 'href="\\\\1?'.session_name().'='.session_id().'&\\\\2\\\\3', $s);
 
hmmm also im Moment fällt mir nix gescheites ein... aber liegt wohl grade an meiner Lustlosigkeit ;)

Aber vielleicht geht ein komplett anderer Ansatz:
; use transient sid support if enabled by compiling with --enable-trans-sid.
session.use_trans_sid = 1

url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
sowas steht in der php.ini... eigentlich sollte also PHP automatisch ein URLRewriting machen !?
 
dann eben nicht...;)
würde sowieso nur gebraucht, wenn der user alle cookies gesperrt hätte und der server trans_sid auf off.
wollte auf sicher gehen.

aber ein anderes regex-prob:
ich will email-adressen im text zu email-links machen: (leider klappts nicht:confused: )
PHP:
$text = "asdfasdfasdf asdfasd asdfasdf [email]mail.addresse@gmx.ch[/email] asdffasd sadsdfa <br> sadsdfa sdaasdf asdffasd [email]email@internet.ch[/email] sdfafasd";
$text2 = preg_replace("/(([a-z0-9]-_\\\.)+@([a-z0-9]-_\\\.[a-z]{2-4}))/esi", "<a href=\"mailto:\\\\1\">\\\\1</a>", $text);
echo $text.'<br><br>'.$text2;
 
hallo,
also so klappt's, wenn auch umständlich:
PHP:
$text = "asdfasdfasdf asdfasd asdfasdf [email]mail.addresse@gmx.ch[/email] asdffasd sadsdfa <br> sadsdfa sdaasdf asdffasd [email]email@internet.ch[/email] sdfafasd";
echo $text.'<br><br>';

// am Leerzeichen aufsplitten, da email kein Leerzeichen enthalten darf:
$text2=split(" ",$text);
// die Teile raussuchen, die "@" enthalten und ersetzen:
foreach ($text2 as $email) {
	if(strstr($email,"@")) {
	$email="<a href=\"mailto:".$email."\">$email</a>";
	}
	$text3=$text3." ".$email;
}
echo $text3;
es gibt sicher 'ne elegantere Lösung:)

mfg,
planet4.
 
so kompliziert kanns nicht sein! ist mir auch zu serverlastig.
hat niemand eine ahnung? oder ein gutes regex tutorial?
 
php.net

schau mal bei der ereg_replace-funktion in die comments und du wirst 100%ig was passendes finden, außerdem gibt es noch die Such-funktion, ich weiß auch das diese Fragen schonmal 100%ig gestellt und beantwortet wurden (ich hab das z.b. mal unter meinen alten Username gefragt [den ich aber nie verraten werde :p]).
 
Hier hab ich's:

$VARIABLE = eregi_replace("([a-zA-Z0-9_.-]+)([@])([a-zA-Z0-9_.-]+)","<a href=\"mailto:\\1\\2\\3\">\\1</a>",$VARIABLE);

argh, das hier ist noch besser:

$VARIABLE = eregi_replace("([a-zA-Z0-9_.-]+)([@])([a-zA-Z0-9_.-]+)([.])([a-zA-Z0-9_.-]+)","<a href=\"mailto:\\1\\2\\3\\4\\5\">\\1</a>",$VARIABLE);


Das hab ich z.b. durch die Suchfunktion gefunden...
 
Zurück
Oben