Links automatisch ersetzen und Header auslesen

Reguläre Ausdrücke sind schön und gut, aber es muss auch logisches Denken beim Programmieren da sein. Denk mal nach, du hast eine funktion die bbcodes konvertiert, ok und jetz geht die funktion ja von oben nach unten ab, und man müsste ja bevor überhaupt das script nach links sucht, erst mal die img-tags finden und konvertieren, und wenn diese konvertiert sind, ist dann an der stelle kein tag mehr (sozusagen dann beim clienten) sondern nur noch html-tags(<img ... />) und dann wird weiter nach links gesucht.

So funktioniert alles:

PHP:
<?php

        $data = "..........";

        $search[] = '/\[img\](http\:\/\/.*?)\[\/img\]/i';
        $search[] = '/(http\:\/\/.*?\.\w{2,6})/i';
        $search[] = '/(www\..*?\.\w{2,6})(.*?)/i';
        
        $replace[] = '<img src="${1}" />';
        $replace[] = '<a href="${1}" target="_blank">${1}</a>';
        $replace[] = '<a href="http://${1}" target="_blank">http://${1}</a>';

        $data = preg_replace($search, $replace, $data);
        
        ?>

Aber eigentlich müssen zwischen den linksuchungen [url] und so aber du möchtest es ja ohne oder täusch ich mich da?
 
Das ist so nicht ganz richtig. Die Funktion die die Links ersetzt wird nur 1x beim posten ausgeführt. Nicht bei jedem laden der Daten aus der Datenbank.

Danach funktioniert ja alles wunderbar. Nur ich will beim senden und ausführen der Funktion die mir URLS zu bbcode macht, nur die Links ersetzen bei denen vorne und hinten ein Leerzeichen ist.

Somit würde:

PHP:
[ IMG]http://www.google.de[ /IMG]

nicht behandelt.

Immoment wird das bei mir nocht gemacht - das will ich vermeiden!

Also bei mir kommt da nun raus:
PHP:
[ IMG][ URL=http://www.google.de]Google[ /URL][ /IMG]

Genauso soll ein Link der schonmal geparst wurde (Also schon in URL-Tags steht) beim erneuten Ausführen der Funktion ja nicht nochmal geparst werden!

Momentan wird aus

PHP:
[ URL=http://www.google.de]Google[ /URL]

ja leider

PHP:
[ URL=[ URL=http://www.google.de]Google[ /URL]]Google[ /URL]

Hoffe das Problem wurde nun verstanden. Es geht nur um den einen regulären Ausdruck in der der Funktion:

PHP:
function getlinks($link) 
{ 
    $pattern = '/([\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i'; 
     
    $link = str_replace("http://www.","www.", $link); 
    $link = str_replace("www.","http://www.", $link); 
    $link = preg_replace_callback( 
        $pattern, 
        create_function( 
            '$matches', 
            'return getPageTitle($matches[0]);' 
        ), 
        $link 
    ); 
    $link = preg_replace("/([\w-?&;#~=\.\/]+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?))/i","<a href=\"mailto:$1\">$1</a>", $link); 
     
    return $link; 
}

Es muss also nur $pattern angepasst werden.
Die Frage ist nun: WIE?
 
Na klein0r :)

Also ich habe alles gelesen und komme mir etwas merkwürdig vor, wenn du einfach beim pattern Leerzeichen, also mindestens eins vor und nach dem Link haben möchtest dann füge es doch einfach in den pattern ein.

PHP:
$pattern = '/(\s+[\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/]\s+)/i';

zur Erklärung: \s : Whitespace; meistens die Klasse der Steuerzeichen \f, \n, \r, \t und \v (Auszug aus Wiki)

Ich kann garnicht glauben das es deine Probleme lösen wird ^^, bestimmt habe ich nicht alles gelesen bzw. verstanden aber so habe ich es mal interpretiert :rolleyes:

Als kleine Anmerkung: Die Funktionen ereg() und eregi() sind nicht mehr zeitgemäß, besser preg_match()

viel Spass noch beim coden ^^
 
Danke aber habe mein Problem schon anders gelöst ;)

Trotzdem danke für die Hilfe - habs aber nicht getestet
 
Zurück