• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Link mit HTML-Tag formatieren

A

about

Guest
Hi erstmal!

Ich bin gerade dabei ein Forum zu schreiben und habe eine Frage dazu.

Angenommen ein User kommentiert einen Thema und in seinem Kommentar befindet sich ein Link, gibt es eine einfache Möglichkeit diesen Link herauszufiltern und mit <a></a> zu formatieren damit er nachher auch als solcher angezeigt wird?

Danke schon mal im vorhinein!
 
Hallo,

ich sag mal wie ich es mal gemacht habe.
Du schreibst den ganzen Kommentar in ein Variable. Mit der Funktion PHP: explode - Manual teilst du mit dem Delimeter Leerzeichen den Text in deiner Variablen Wortweise in ein Array auf.
Jetzt haben wir also ein Array wo sich in jedem einzelnem Element ein Wort befindet.
Mit einer Schleife duchläufst du das Array und ersetzt immer wenn www. oder http:// als Wortanfang vorkommt den Inhalt durch Deinen String zusammen mit dem gefundenen Link.
Da man ja nun einzelne Worte in den Feldern des Array hat kann man natürlich zusätzlich noch nach anderen Begriffen suchen und diese ersetzen, zum Beispiel Schimpfworte durch OOOHPS oder so. Vieles ist denkbar.

Anschliessend das Array wieder in eine Variable zusammenführen und weiter verarbeiten.

Das war nur eine Möglichkeit es geht auch mit regulären Ausdrücken und noc einiges mehr. Eine Übersicht über PHP: String-Funktionen - Manual
 
Hallo,

ich sag mal wie ich es mal gemacht habe.
Du schreibst den ganzen Kommentar in ein Variable. Mit der Funktion PHP: explode - Manual teilst du mit dem Delimeter Leerzeichen den Text in deiner Variablen Wortweise in ein Array auf.
Jetzt haben wir also ein Array wo sich in jedem einzelnem Element ein Wort befindet.
Mit einer Schleife duchläufst du das Array und ersetzt immer wenn www. oder http:// als Wortanfang vorkommt den Inhalt durch Deinen String zusammen mit dem gefundenen Link.
Da man ja nun einzelne Worte in den Feldern des Array hat kann man natürlich zusätzlich noch nach anderen Begriffen suchen und diese ersetzen, zum Beispiel Schimpfworte durch OOOHPS oder so. Vieles ist denkbar.

Anschliessend das Array wieder in eine Variable zusammenführen und weiter verarbeiten.

Das war nur eine Möglichkeit es geht auch mit regulären Ausdrücken und noc einiges mehr. Eine Übersicht über PHP: String-Funktionen - Manual

Danke, das ist eine geniale Idee. Hat super geholfen :)
 
Hier ein Ansatz mit einem regulären Ausdruck.

Das würde ich aber nicht unbedingt empfehlen, da Escaping da etwas haarig werden kann und man sich schnell XSS-Angriffe einfangen kann.

Den Nachteil hat Wustersoss' Ansatz als „echter Parser“ nicht. (Effizienter hinsichtlich des Speicherverbrauchs wäre aber eine Schleife, die von Whitespace zu Whitespace durch die Eingabe läuft und immer nur den Bereich zwischen zwei Whitespaces betrachtet. Mit explode hast du alles doppelt im Speicher.)

PHP:
<?php

function addLinks($input)
{
    $ret = preg_replace_callback('#\b(?:http(s?)://|www\.)\S+#i',
            function ($matches) {
                $href = $matches[0];

                // "http://" für Link ergänzen, falls nicht vorhanden
                if (stripos($matches[0], 'www.') === 0) {
                    $href = 'http://' . $matches[0];
                }

                return '<a href="' . $href . '">' . $matches[0] . '</a>';
            }, $input);

    return $ret;
}

$demoInput = <<<EOT
www.example.org

Hallo,

ich sag mal wie ich es mal gemacht habe.
Du schreibst den ganzen Kommentar in ein Variable. Mit der Funktion
http://php.net/manual/de/function.explode.php teilst du mit dem Delimeter
Leerzeichen den Text in deiner Variablen Wortweise in ein Array auf.
Jetzt haben wir also ein Array wo sich in jedem einzelnem Element ein Wort
befindet.
Mit einer Schleife duchläufst du das Array und ersetzt immer wenn www. oder
http:// als Wortanfang vorkommt den Inhalt durch Deinen String zusammen mit dem
gefundenen Link.
Da man ja nun einzelne Worte in den Feldern des Array hat kann man natürlich
zusätzlich noch nach anderen Begriffen suchen und diese ersetzen, zum Beispiel
Schimpfworte durch OOOHPS oder so. Vieles ist denkbar.

Anschliessend das Array wieder in eine Variable zusammenführen und weiter
verarbeiten.

Das war nur eine Möglichkeit es geht auch mit regulären Ausdrücken und noc
einiges mehr. Eine Übersicht über http://es2.php.net/manual/de/ref.strings.php
EOT;

echo '<pre>', addLinks($demoInput), '</pre>';
 
Zurück
Oben