PHP :: Reguläre Ausdrücke :: Problem



  • Ja, gut... damit kann ich leben, Kommas kann man noch hinzufügen, baer \\1 ist bei mir dabei leer, ansonsten funktioniert der Ausdruck a sich... aber wie gesagt: nun habe ich keine URL mehr... bzw. nur http:// ohne etwas danach.

    EDIT: *omg* - \\2 gibts ja ooch noch ^^ sorry. Danke dir. so funktioniert's:

    $message=preg_replace('~(http\:\/\/)([0-9a-zA-Z\,\.\-_\/\?\&\%]*)~',"<a href=\"\\1\\2\">\\1\\2</a>",$message);
    


  • Vielleicht noch 'ne andere Frage: Ich hab ja ein Gästebuch, und da werden URLs quasi jetzt umgewandelt. Allerdings habe ich aucheine Funktion geschrieben:

    function trim_long_words($txt,$len)
    {
      $txt=str_replace("<br>","<br> ",$txt);
      $a=explode(" ",$txt);
      for($i=0;$i<count($a);++$i)
        for($j=0;$j<strlen($a[$i]);++$j)
          if($j%$len==0)
            $a[$i]=substr($a[$i],0,$j)." ".substr($a[$i],$j,strlen($a[$i]));
      return str_replace("<br> ","<br>",implode(" ",$a));
    }
    

    Frage hierzu: URLs sollen natürlich nicht zerschnitten werden, wie kann ich das machen?`

    Und dann wäre noch wünschenswert, wenn eine URL zu lang ist, dort die ersten paar Zeichen, ... und die letzten zeichen anzuzeigen, also etwa sowas hier:

    http://ganzganzganzganzlangeurl.com/ -> http://gan...geurl.com/

    OK, letzteres sollte ich noch selbst packen, aber das davor... k.a. wie ich das anstellen soll.

    EDIT: Verdammt... ich kann auf die tatsächliche Länge von \\1\\2 nicht zugreifen, stattdessen wird mir 6 ausgegeben... dh. ich komm mit letzterem Punkt doch nicht klar... kann mir da einer helfen?


  • Mod

    Schau dir mal den e modifier an



  • EDIT: Cool, danke, hat mir beim letzten Problem schonmal geholfen, jetzt ist nurnoch das Problem mit dem trim_long_words...



  • @Windoof

    Die Website in deinem Anhang funktioniert nicht!



  • lol... warte mal 10 sekunden ab ^^ oder klick auf aktualisieren oder auf netzwerkeinstellungen oder auf zurück... 😉

    EDIT: Und lies dir die "Fehlermeldung" auch mal durch: "Die Seite will nicht angezeigt werden." Also wer das für eine echte Fehlermeldung hält...





  • Hmm... ne, das hilft mir nicht, weil:

    ich will Wörter umbrechen, die zu lang sind: Ja
    ich will URLs umbrechen, also http://www.gaaaaaaaaaaanz-lange-url.de/ : Nein.

    Und diese Funktion würde aber beides oder garnichts von beidem umbrechen.



  • Was kann denn txtallesenthalten(bzgl.Tagsusw.)?for(txt alles enthalten (bzgl. Tags usw.)? for(i=0;i<count(i<count(a);++i) <-- hier besser foreach for(j=0;j<strlen(j<strlen(a[i]);++j) <-- warum gehst du jeden Buchstaben einzeln durch ???



  • Nunja... no comment 😃 Na sag du mir, wie ich das machen soll, ich bin hier ja derjenige, der keine Ahnung hat :p Aber es muss so sein, dass bei

    http://www.url.com/folder/file.php?param=value&param2=value2

    und bei

    http://www.newssite.com/articles/05/02/01,8,50,23.htm

    nichts zerstückelt wird, aber bei

    loooooooooooooooooooooooooooooooooooooooooooooooooooool

    schon. Das ist mein Problem. Ich wieß, dass man das wirgendwie mit regulären Ausdrücken machen muss, aber ich weiß nicht wie ich das anstellen soll...



  • ist denn jetzt dein $txt Plain-Text, oder schon HTML-Code?!
    Wenn du z.B. zuerst htmlspecialchars über den String laufen lässt, dann mit deinem preg_replace die URLs durch Tags ersetzt und die "Anzeige-URL" ggf. entsprechend kürzt, dann kannst du nachher einfach dein explode machen. Wenn dann das erste Zeichen eines Elements ein < ist, dann weißt du, dass es sich um eine URL handelt und gehst einfach weiter zum nächsten Element.
    Oder du machst einfach wieder ein preg_replace und suchst Strings mit z.B. mehr als 50 Zeichen, dia aber nicht in < > eingeschlossen sind 🙂



  • $message=str_replace("\\\\","\\",$message);
       $message=str_replace("\\'","'",$message);
       $message=str_replace("\\\"","\"",$message);
       $message=get_short($message,512);
    //   $message=trim_long_words($message,38);
    
    // Plain Text, außer Zeilenumbrüche
    
       $message=preg_replace('~(http\:\/\/)([0-9a-zA-Z\,\.\-_\%\/]*)([0-9a-zA-Z\,\.\-_\%\&\?\=\/]*)~e',"'<a href=\"\\1\\2\\3\" title=\"\\1\\2\\3\" target=\"_blank\">'.get_short('\\2',36).'</a>'",$message);
    
    // Links evtl. enthalten
    

    Es kommt drauf an, wo man es durchlaufen lassen will.



  • Hast du mit meiner Vorgehensweise jetzt etwas anfangen können - oder was genau ist jetzt noch deine Frage?! 🙄


Anmelden zum Antworten