preg_replace und Probleme...

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • preg_replace und Probleme...

    Ok, ich habe ein Template, in welchem sowohl Links als fertige Links (also mit "<a..." usw.) als auch Text-Links (nur die URL) enthalten sind. Beim Parsen sollen die Text-Links in richtige Links gewandelt werden, die bereits fertigen Links sollen allerdings nicht doppelt gelinkt werden (also z.B. "<a href=...<a ...") usw.).

    Wie ist das zu realisieren?

    Hier der derzeitige Stand:

    Code:
    Routine:
    
    $search = array("/([\w\.\/\&\=\?\-]+)@([\w\.\/\&\=\?\-]+)/","/((ftp(7?):\/\/)|(ftp\.))([\w\.\/\&\=\?\-]+)/","/((http(s?):\/\/)|(www\.))([\w\.\/\&\=\?\-]+)/");
    $replace = array ("<a href='mailto:$1@$2'>$1@$2</a>","<a href='ftp$3://$4$5' target='_blank'>$4$5</a>","<a href='http$3://$4$5' target='_blank'>$4$5</a>");
    
    $text = preg_replace ($search, $replace, $text);
    Code:
    Source:
    
    [email]testadresse@irgendwas.de[/email] (als Link)
    [email]testadresse@irgendwas.de[/email] 
    [url]www.irgendwas.de[/url] (als Link)
    [url]www.irgendwas.de[/url]
    [url]http://www.irgendwas.de[/url] (als Link)
    [url]http://www.irgendwas.de[/url]
    Code:
    Ergebnis:
    
    <a href="mailto:<a href='mailto:testadresse@myhouse.gov'>testadresse@myhouse.gov</a>"><a href='mailto:testadresse@myhouse.gov'>testadresse@myhouse.gov</a><br>
            </a><a href='mailto:testadresse@myhouse.gov'>testadresse@myhouse.gov</a><br>
            <a href="<a href='http://www.irgendwas.de' target='_blank'>[url]www.irgendwas.de[/url]</a>">
            <a href='http://www.irgendwas.de' target='_blank'>[url]www.irgendwas.de[/url]</a><br>
            </a><a href='http://www.irgendwas.de' target='_blank'>[url]www.irgendwas.de[/url]</a></font><font size="1"><a href="<a href='http://www.irgendwas.de' target='_blank'>[url]www.irgendwas.de[/url]</a>"><br>
            <a href='http://www.irgendwas.de' target='_blank'>[url]www.irgendwas.de[/url]</a></a><br>
            <a href='http://www.irgendwas.de' target='_blank'>[url]www.irgendwas.de[/url]</a>
    Ich denke mal man müsste mit preg_match auf die Links über prüfen als z.B: if (preg_match("<a *>*</a>",$text)) { ... } aber das geht so einfach nicht. Wäre wirklich dankbar für eine Hilfe.
    Contentpapst 3.1 - Der Preisbrecher unter den Content-Management-Systemen
    www.contentpapst.de / WYSIWYG-Editor, Rechtesystem, eigene Module per GUI... // Demoversion
    [color=red]Ab sofort in Version 3.1![/color] / dazu auch Standalone Shop-System CP::Shop uvm.

  • #2
    Weiss denn keiner eine sinnvolle Lösung? Einen normalen Text-Link in einen anklickbaren Link zu verwandeln ist ja recht einfach. Oder ist es sinnvoller, erst alle fertigen Links per PHP zu entfernen und dann wieder neu zu versehen???
    Contentpapst 3.1 - Der Preisbrecher unter den Content-Management-Systemen
    www.contentpapst.de / WYSIWYG-Editor, Rechtesystem, eigene Module per GUI... // Demoversion
    [color=red]Ab sofort in Version 3.1![/color] / dazu auch Standalone Shop-System CP::Shop uvm.

    Kommentar


    • #3
      F: was unterscheidet einen 'fertigen' Link von einer Url?
      A: Leerzeichen.
      -> den string am Anfang ein Leerzeichen hinzufügen, den Zeilenumbrüchen auch,
      und $search so ändern das es ein Leerzeichen am Anfang erwartet.

      so mache ich es jedenfalls...
      Gruß
      Thomas

      Kommentar

      Lädt...
      X