tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
1411
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Daxi Daxi ist offline Mitglied Brokat
    Registriert seit
    Jul 2003
    Ort
    PAF
    Beiträge
    396
    Hallo!
    Ich bin dabei mir eine kleine Community zu schreiben.
    Derzeit hänge ich leider am Problem preg_replace für URLs und E-Mail-Adressen.
    Ich will das ganze auf zwei Wege machen.
    1. BBCode (funktioniert bestens)
    2. Automatisch erkennen

    Welche preg_replaces brauche ich dafür?
    Ich möchte das so möglich machen:
    - http://domain.de wird zu Link
    - www.domain.de wird zu Link
    - info@domain.de wird zu Link

    Zu beachten ist dabei nur, dass ich vorher (bevor ich die BBCode ersetze) dem Text Linebrakes einfüge.
    PHP-Code:
    $t str_replace("\r\n","<br>\r\n",$t); 
    Kann mir von euch jemand weiterhelfen?
    Ich habe mir zwar ein Buch über PHP4 gekauft, komme aber trotzdem nicht ganz mit der Patternsyntax klar.
    Im original PHP-Handbuch ist gerade diese Seite englisch... *#@!
     

  2. #2
    methodus methodus ist offline Mitglied Platin
    Registriert seit
    Mar 2002
    Ort
    Leipzig
    Beiträge
    543
    *freu* wieder was für mich

    Suchpattern für die autmatische URL-Erkennung:

    $pattern_mit_und_ohne_http = "/[http:\/\/]?(([a-z0-9][a-z0-9_-]*)(\.[a-z0-9_-]+)+\/?(.*))/i";

    $pattern_email = "/[a-z0-9_-.]@[a-z0-9][a-z0-9_-]*(\.[a-z0-9]+)+/i";

    musst mal testen. Bin nicht mehr in der Lage noch meine Augen wachzuhalten

    Dürfte aber funktionieren, wenn nicht, sag bescheid
     
    Empirismus, die lieblingsmethode aller mir bekannter Programmierer :]

  3. #3
    Daxi Daxi ist offline Mitglied Brokat
    Registriert seit
    Jul 2003
    Ort
    PAF
    Beiträge
    396
    Ich hab jetzt ein kleines Problem (klein für dich):
    Setze ich dein URL-Pattern ein, so wird eine E-Mail-Adresse z.B. zu: info@(link).
    2. steht hinter der domain noch ein Text, so gehört der für das Pattern noch mit dazu.

    Ich hätte das gerne noch etwas modifiziert.
    Es sollen die Protokolle http:// und ftp:// erlaubt sein.
    Das wäre doch dann am Anfang dann sowas in der Richtung: [http:\/\/|ftp:\/\/] kann ich jetzt irgendwie herausfinden, ob da jetzt http:// oder ftp:// davorsteht, oder geht das nur mit (.*?){3,4}:\/\/(.*?), sodass ich \1 = Protokol und \2 = Seite etc. habe?

    edit:
    Ich habs jetzt soweit umschreiben können:
    PHP-Code:
    $t preg_replace("(\\s)(http:\\/\\/|ftp:\\/\\/|www\\.)(([a-z0-9][a-z0-9]*)([\\.a-z0-9_-]+)+\\/?(.*))#ie",
    "\\\\1<a href=\\"\\\\2\\\\4\\\\5\\" target=\\"_blank\\">\\\\2\\4\\\\5</a>\\\\6",$t); 
    Das funktioniert jetzt so, dass ich den Text davor und dahinter auch noch als normalen Text habe.
    Nur ein Problem besteht jetzt noch.
    ist die Domain nur mit www. geschrieben, so muss eigentlich im Link am Anfang ein http:// stehen. Wie bekomme ich das jetzt hin? geht das direkt im Pattern oder muss ich dafür das Patter mit dem Modifier e machen und den Link dann von einer Funktion erstellen lassen, die bei einem www. http://www. daraus macht?

    Im Klartext:
    PHP-Code:
    $t preg_replace("(\\s)(http:\\/\\/|ftp:\\/\\/|www\\.)(([a-z0-9][a-z0-9]*)([\\.a-z0-9_-]+)+\\/?(.*))#ie",
    "bbc_link('\\1','\\2','\\4','\\5','\\6');",$t);

    function 
    bbc_link($a,$b,$c,$d,$e) {
     
    $c $a;
     
    $b = ($b == "www.") ? "http://www." $b;
     
    $c .= "<a href=\"".$b.$c.$d."\" target=\"_blank\">".$b.$c.$d."</a>".$e;
     return 
    $c;

    Dieser Code müsste eigentlich den gewünschten Erfolg bringen. Geht es auch einfacher?
    Geändert von Daxi (08.09.03 um 23:50 Uhr)
     

  4. #4
    Daxi Daxi ist offline Mitglied Brokat
    Registriert seit
    Jul 2003
    Ort
    PAF
    Beiträge
    396
    Ich habs jetzt geschafft.
    PHP-Code:
    $t preg_replace("#(http:\\/\\/|ftp:\\/\\/|www\\.)(([a-z0-9][a-z0-9]*)([\\.a-z0-9_-]+)+\\/?(.*))#ie",
    "'<a href=\\"'.(('\\\\1' == 'www.') ? 'http://' : '').'\\\\1\\\\3\\\\4\\" target=\\"_blank\\">\\\\1\\\\3\\\\4</a>\\\\6'",$t); 
    Das funktioniert jetzt.
    Danke für deine Hilfe.
    Jetzt schau ich mal zwecks E-Mail-Adressen...

    edit:
    Ich habe das Pattern nochmal editiert.
    Es findet jetzt einwandfrei die URLs und E-Mail-Adressen.
    Kann ich irgendwie definieren, dass vor der Adresse nicht ], =, " sein dürfen und dahinter kein [, ], " sein darf?
    Ich will also diese Zeichen ausschließen.
    Wie geht sowas?
    Geändert von Daxi (09.09.03 um 01:26 Uhr)
     

  5. #5
    methodus methodus ist offline Mitglied Platin
    Registriert seit
    Mar 2002
    Ort
    Leipzig
    Beiträge
    543
    diese Zeichen schließen sich normalerweise bei dem Emailpattern automatisch aus, da ich nur Buchstaben von a - z und Zahlen sowie Unterstrich und Bindestrich erlaube

    achso, die Anweisung "e" am Ende deines HTML-Patterns brauchst du nicht wirklich, da du ja keinen Programmcode verwendest. Stattdessen schreib ein "x" hin, dadurch werden alle Whitespacezeichen ( Leerzeichen, Zeilenumbrüche etc.) ignoriert solange sie nicht klar definiert worden sind.
     
    Empirismus, die lieblingsmethode aller mir bekannter Programmierer :]

  6. #6
    Registriert seit
    Nov 2002
    Beiträge
    2.709
    Original geschrieben von Daxi
    [...]
    Zu beachten ist dabei nur, dass ich vorher (bevor ich die BBCode ersetze) dem Text Linebrakes einfüge.
    [...]
    Zeilenbremsen?

    *SCNR*
     
    Im Ruhestand.

Ähnliche Themen

  1. Antworten: 6
    Letzter Beitrag: 07.05.08, 15:57
  2. URLs durch HTML-Links ersetzen
    Von cameeel im Forum PHP
    Antworten: 8
    Letzter Beitrag: 06.07.06, 12:29
  3. Antworten: 6
    Letzter Beitrag: 17.06.06, 10:38
  4. URLs anklickbar machen...
    Von Jost im Forum PHP
    Antworten: 9
    Letzter Beitrag: 23.07.05, 21:18
  5. e-mail adressen
    Von Stephan Zesiger im Forum Hosting & Webserver
    Antworten: 20
    Letzter Beitrag: 15.07.02, 12:07