preg statt ereg bei URL erkennung
Tobias Perschon
- php
0 lixx0 Tobias Perschon0 lixx
hallo!
also ich möchte das sachen wie http://www.test.at in links umgewandelt werden...
das beispiel von php.net funktioniert ganz gut:
$input = "http://www.test.at";
$input = eregi_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]","<a href="\0" target="_blank">\0</a>", $input);
$input -> <a href="http://www.test.php" target="_blank">http://www.test.php</a>
hier gibt es allerdings ein problem:
(mit einem leerzeichen nach at geht es)
$input = "[b]http://www.test.at[/b]";
$input = eregi_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]","<a href="\0" target="_blank">\0</a>", $input);
$input -> <a href="http://www.loot.at/?test=lalala[/b" target="_blank">http://www.loot.at/?test=lalala[/b</a>]
wie kann muss man die regex verändern das er [/b nicht mitnimmt... also vor [ aufhört?
[ kommt sowieso nie in einer url vor...
ich hab mir gedacht mit nem negativen oder positiven lookahead... allerdings hab ich den neg/pos lookahead synax nur für perl also preg gefunden (?=[) <- könnte der das gewünschte ergebniss bringen
und noch ne frage:
was macht das ^<> bei [^<>[:space:]]?
grüße
hi!
also: wenn es mehrere urls sind, dann solltest du preg_replace() verwende, da schneller.
[ kommt sowieso nie in einer url vor...
... Wenn du ein Array übergibst dann schon:
index.php?myVar[]=12&myVar[]=56
Die _GET-Variable ist dann ein Array mit zwei Elementen.
Ohne entsprechenden Trennzeichen weiß man dann eh nie wann schluss ist. Und auf ein Leerzeichen ist auch kein verlass, wenn nach der URL ein "." kommt. Aber wenn du es so machst wie einmal in Deinem Beispiel:
$input = "Text ... [b]http://www.test.at[/b] ... Text ... ";
Dann ist es relativ einfach:
echo preg_replace('/[b](.*|^[/b])[/b]/i', '<a href="$1">$1</a>', $input);
Hoffe das hilft Dir.
lg lixx
nein es geht nicht um das [b] ich will nur verhindern das wenn die funktion auf ein [/ trifft das dies nicht zur url gezählt wird... in allen anderen fällen steht eh ein leerzeichen und das wird nicht mitgenommen
kann man das mit lookaheads lösen?
wie beschreibt man lookaheads in ereg?
ich würde eh lieber preg verwenden... wie kann ich
"[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]" in einen gleichwertigen preg regex verwandeln?
und was macht das ^<> bei [^<>[:space:]]?
danke und grüße
ich würde eh lieber preg verwenden... wie kann ich
"[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]" in einen gleichwertigen preg regex verwandeln?
Hier die Dokumentation:
http://at.php.net/manual/de/function.preg-replace.php
http://at.php.net/manual/de/reference.pcre.pattern.modifiers.php
http://at.php.net/manual/de/reference.pcre.pattern.syntax.php
Ist am Anfang extrem mühsam sich da durchzuarbeiten. Aber es lohnt sich auf jeden Fall!
und was macht das ^<> bei [^<>[:space:]]?
"[^<>[:space:]]+[[:alnum:]/]" sucht dir im String die Zeichen "0-9", "A-Z", "/" aber NICHT "<", ">", " ". "^" steht für nicht. Um nun das "["-Zeichen auszuschließen: "^[<>[:space:]]"
Aber vergiss den Ausdruck. Der taugt wirklich nichts. Ein "index.html" findet der nicht, oder?
lg lixx
Ist am Anfang extrem mühsam sich da durchzuarbeiten. Aber es lohnt sich auf jeden Fall!
hast du nen tipp auf was ich achten muss beim selberbaun von meinem url erkenn regex?
Aber vergiss den Ausdruck. Der taugt wirklich nichts. Ein "index.html" findet der nicht, oder?
doch klar der erkennt auch https usw... von da her finde ich sie echt super und desshalb würd ich sie gern direkt auf preg umwandeln... ich hoff das man dann mit den negativen lookaheads das dazunehmen von [/ verhindern kann (fals [/ überhaupt kommt für den fall das jemand die url mit irgendwelche tags versieht z.b. [fett]http://test.at[/fett]
sry das ich mich wiederhole aber ich hab das gefühl gehabt das ich mich oben nicht richtig ausgedrückt hab :)
doch klar der erkennt auch https usw... von da her finde ich sie echt super und desshalb würd ich sie gern direkt auf preg umwandeln... ich hoff das man dann mit den negativen lookaheads das dazunehmen von [/ verhindern kann (fals [/ überhaupt kommt für den fall das jemand die url mit irgendwelche tags versieht z.b. [fett]http://test.at[/fett]
Jetzt muss ich mich wohl wiederholen ;)
"[^<>[:space:]]+[[:alnum:]/]" sucht dir im String die Zeichen "0-9", "A-Z", "/" aber NICHT "<", ">", " ". "^" steht für nicht. Um nun das "["-Zeichen auszuschließen: "^[<>[:space:]]"
===>>> "^[" das müsste es sein.
hast du nen tipp auf was ich achten muss beim selberbaun von meinem url erkenn regex?
Googeln hilft immer - warum das Rad dann neu erfinden?
http://www.phpforum.de/archiv_21754_Links@in@einem@Text@erkennen_anzeigen.html
lg lixx
achsooo, jez blick ich durch... sorry ich bin irgendwie auf der leitung gestanden :)
danke auf jeden fall für deine hilfe!