Pattern Matching Problem - nur Online?!
andre
- php
hallo alle,
ich nutze folgende function (gästebuch) um die links automatisch zu generieren:
function links($eintrag) {
$p[0][0] = '"(( |^)((ftp|http|https){1}://)[-a-zA-Z0-9@:%_+.~#?&//=]+)"i';
$p[0][1] = '<a href="\1" target="_blank">klick!</a>';
$p[1][0] = '"( |^)(www.[-a-zA-Z0-9@:%_+.~#?&//=]+)"i';
$p[1][1] = '\1<a href="http://\2" target="_blank">klick!</a>';
$p[2][0] = '"([_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3})"i';
$p[2][1] = '<a href="mailto:\1">klick!</a>';
for($i=0; $i<count($p); $i++) {
$eintrag = preg_replace($p[$i][0], $p[$i][1], $text);
}
return nl2br($eintrag);
}
lokal auf meinem rechner funktioniert alles einwandfrei aber nicht online? ich hatte $eintrag schon auf global gesetzt - bringt auch nichts.
hat jemand eine idee?
vielen dank
andré
hallo nochmal. es funktioniert schon, aber nur wenn in den link kein "-" (minus) drin vorkommt.
kennt sich jemand gut mit pattern matching aus, der das lösen kann?
ich leider nicht :(
vielen dank
drella
hat sich erledigt!!! funktioniert. sorry
Huhu Andre
hat sich erledigt!!! funktioniert. sorry
Trotzdem noch ein kleiner Hinweis.
preg_replace() kann auch mit Arrays "gefüttert"
werden. Deine for-Schleife ist nicht unbedingt notwendig.
Du könntest das ungefähr wie folgt schreiben:
$map = array(
'"(( |^)((ftp|http|https){1}://)[-a-zA-Z0-9@:%_+.~#?&//=]+)"i' =>
'<a href="\1" target="_blank">klick!</a>',
'"( |^)(www.[-a-zA-Z0-9@:%_+.~#?&//=]+)"i' =>
'\1<a href="http://\2" target="_blank">klick!</a>',
);
$eintrag = preg_replace(array_keys($map), array_values($map), $text);
Viele Grüße
lulu