preg_replace in Kombination mit parse_url
Andi
- php
Hallo zusammen
Ich verzweifle beinahe an preg_replace in Kombination mit parse_url.
$text = "http://www.abc.com/test.zip";
$text = preg_replace("#(^|[^\"=]{1})(http://|ftp://|mailto:|https://)([^\s<>]+)([\s\n<>]|$)#sm", "\\1<a href=\"\\2\\3\" target=\"_blank\">" . parse_url("\\2\\3", PHP_URL_HOST) . "</a>\\4", $text);
Die Ausgabe: <a href="http://www.abc.com/test.zip" target="_blank"></a>
Der Linktext bleibt leer! Sollte doch wirklich alles so stimmt, oder eben doch nicht?
DAnke und Grüsse, Andi
Der Linktext bleibt leer! Sollte doch wirklich alles so stimmt, oder eben doch nicht?
Ohne dem eval-Modifikator wird nichts evaluiert.
Da mir die Erfahrung mit Eval fehlt, wie verwende ich den Befehl genau. Egal wo ich eval() einsetze, die Ausgabe bleibt leer.
Da mir die Erfahrung mit Eval fehlt, wie verwende ich den Befehl genau. Egal wo ich eval() einsetze, die Ausgabe bleibt leer.
PHP Dokumentation -> Dokumentationsseite zu preg_replace()
Shortcut für deine In-Text-Suche drücken - unter Windows in fast allen Browsern CTRL+F.
"Modifikator" suchen. Ein paar Textstellen die irgendwas mit "e" zu tun haben gefunden und gelesen, nicht verstanden worum es geht - egal, jedenfalls merken - wird ggf. wichtig sein, ansonsten hätte suit wohlkaum das Wort verwandt.
Also weiter: "eval" suchen. In den Kommentaren finden dass wohl /e etwas mit eval zu tun hat.
Kombinieren mit dem zuvor gefundenen und die Seite nach beispielen mit /e durchforsten.
Feststellen, dass es "Beispiel #4 Die Verwendung des Modifikators 'e'" gibt und dies lesen und anwenden.
Trotz reichlich Sarkasmus sage ich jetzt einfach mal anständig Danke! Es hat gut geklappt! Als Info, preg_replace und Regex ist für Leute die nie damit gearbeitet haben, schwer zu verstehen! Die Doku hilft, habe diese auch gelesen, sogar mehrfach, aber alles kann man nicht von anfang an wissen! Danke!
Trotz reichlich Sarkasmus sage ich jetzt einfach mal anständig Danke!
Das war kein Sarkasmus, das war ein innerer Monolog aus der Sicht einens Außenstehenden, der meinen Post gelesen hat.
Möglicherweise hilft dir so ein Denkansatz auch in Zukunft.
Als Info, preg_replace und Regex ist für Leute die nie damit gearbeitet haben, schwer zu verstehen!
Das gilt auch für Leute die schon damit gearbeitet haben. Das wichtigste, dass es an regulären Ausdrücken zu verstehen gibt: verwende sie nur, wenn es dir einen Vorteil verschafft - und wenn du das tust: ganz oder garnicht.
Das ist das, was Sven meinte - wenn du schon mit PCRE-Funktionen arbeitest, kannst du auf Handstände wie eben eval und dann parse_url auch verzichten und gleich das gefundene Muster mit Subpatterns entsprechend einer Wünsche zerlegen.
Die Doku hilft, habe diese auch gelesen, sogar mehrfach, aber alles kann man nicht von anfang an wissen! Danke!
Das hat niemand behauptet, darum habe ich dir auch zwei entscheidende Stichworte genannt, mit denen du in der Doku fündig wirst :)
Moin!
Ich verzweifle beinahe an preg_replace in Kombination mit parse_url.
Warum kombinieren?
Du hast da einen regulären Ausdruck, der dir das Vorkommen von URLs auffindet. Damit hast du ein extrem mächtiges Werkzeug bereits an der Hand. Du suchst nur falsch - derzeit nach dem Vorkommen eines Protokolls, und dann nach dem Vorkommen von dem gesamten restlichen URL-String. Warum trennst du das nicht auf - einmal die Domain, und dann noch den restlichen Pfad? Dann hast du genau das einzeln Verfügbar, was dir parse_url auch liefern würde - aber ohne das Extra-Risiko von evaluiertem Code, und mit besserer Performance.
- Sven Rautenberg
Gute Frage, ich habe mir das auch schon überlegt. Allerdings habe ich schon bei diesem Regex eine Nacht gebraucht, bis es so gelaufen ist, wie ich es mir vorgestellt habe. Wie ich jetzt das Ganze noch aufteilen soll, ist mir nicht ganz klar. Aber richtig, besser wäre es auf jeden Fall.
Hi,
Gute Frage, ich habe mir das auch schon überlegt. Allerdings habe ich schon bei diesem Regex eine Nacht gebraucht, bis es so gelaufen ist, wie ich es mir vorgestellt habe. Wie ich jetzt das Ganze noch aufteilen soll, ist mir nicht ganz klar.
Dann überlege dir zunächst, welche Bestandteile solch ein URL hat oder haben kann(!), bzw. welche davon du einzeln identifizieren willst.
Anschliessend überlege dir, wie du diese einzelnen Bestandteile in einzelne Muster umsetzt, und schlussendlich, wie sie sinnvoll zu kombinieren sind (bspw. in Hinsicht auf optionale Bestandteile).
MfG ChrisB
Anschliessend überlege dir, wie du diese einzelnen Bestandteile in einzelne Muster umsetzt, und schlussendlich, wie sie sinnvoll zu kombinieren sind (bspw. in Hinsicht auf optionale Bestandteile).
Oder man guckt sich einfach an, wie die PHP-internen Funktionen arbeiten, da sind auch häufig für solche aufgaben reguläre Ausdrücke am Werk (nur auf einem tieferen Level).
Im Fall von parse_url()[1] trifft das aber nicht zu.
[1] Zeile 97 php_url_parse_ex()