[Funktion] URL´s erkennen und kürzen

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

  • [Funktion] URL´s erkennen und kürzen

    Hallo,

    da ich gerade mein CMS mit neuen Funktionen ausstatten möchte bin ich bei einem automatischen URL Parser hängengeblieben. Das erkennen funktioniert zu ca 50%.

    Hier mein Code, mit dem er alles richtig macht.

    PHP-Code:
    function alinks($text) {
    $text eregi_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]","<a href=\"\\0\" target=\"_blank\">\\0</a>"$text);
    return 
    $text;

    Das Problem ist nun allerdings, das wenn Leute was ins Forum schreiben, sie die URL meistens auswendig kennen und kein http:// verwenden. Aus diesem Grund soll die Funktion nun auch noch URL erkennen die nur mit www. beginnen, aber darauf achten das die URL die mit http: beginnen nicht mit einbezogen werden, da da ja schliesslich auch ein www enthalten ist.


    Nun zu meinem zweiten Problem.

    Man kennt es aus vielen Foren, eine lange URL wirst automatisch in der Mitte gekürzt und am Ende wird noch ein Teil ausgeschrieben. Diese Funktion sollte wenn möglich auch noch eingebaut werden.


    Ich sage schonmal danke, und wer mir diese Aufgabe gut löst bekomtm eventuell noch mal ein bezahlten Auftrag von mir


    MfG
    Benny
    Zuletzt geändert von InsideTech; 18.07.2007, 10:28.

  • #2
    Hallo, such doch einfach mal im Forum.
    Diese Dinger gibt es hier zuhauf, z.B. im Code Schnippsel Forum

    MfG

    Kommentar


    • #3
      Gut, Umwandlung ist geglückt. Mit der Kürzung habe ich allerdings noch nichts gefunden

      Kommentar


      • #4
        Prinzip der Kürzung:
        Variable mit der Länge und Variable mit der Ersetzung. Dann würde ich sicherstellen, dass jeder Link mit http:// beginnt (falls nicht, dann manuell einfügen). Danach verwendest du z.B. parse_url() um den Link in die Bestandteile zu zerlegen. Du kriegst dann ein Array mit den Elementen scheme,host,path und ggf query. Host würde ich komplett ausgeben und keinesfalls kürzen. Auch den Dateinamen (kriegst du mittels basename($arr['path']) würde ich ungekürzt belassen.
        Dann zerlegst du path z.B. mittels explode und / in seine Bestandteile. Nun gehst du mittels einer Schleife über die einzelnen Elemente von path und fügst diese solange an host an wie die Länge des Gesamtstrings deine vorgegebene Länge nicht überschreitet. Wenn die Länge die Grenze überschreitet fügst du Ersetzung an den String und brichst die Schleife mittels break ab.

        Ich habe letztes Weekend mal eine solche Fkt für mich gebastelt. Kann den Quellcode am Abend reinstellen wenn du magst.

        Gruss

        tobi
        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

        Kommentar


        • #5
          Dann zerlegst du path z.B. mittels explode und / in seine Bestandteile. Nun gehst du mittels einer Schleife über die einzelnen Elemente von path und fügst diese solange an host an wie die Länge des Gesamtstrings deine vorgegebene Länge nicht überschreitet. Wenn die Länge die Grenze überschreitet fügst du Ersetzung an den String und brichst die Schleife mittels break ab.
          Der Teil ist nicht so schön. Besser du nimmst nimmst hier die URL vorne und den Dateinahmen hinten und legst dann mit Stringfunktionen eine Länge fest. Wenn die URL nicht mittendrin getrennt werden soll gibts hier eine Lösung.
          Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

          Kommentar


          • #6
            Also ich habe bereits diesen Code gefunden :

            PHP-Code:
            function urlcut($url,$url2=0,$zusatz=0) { 
               
            $raw $url
                if(!
            $url2$url2 $url;
               if (
            strlen($url) > 40) { // 40 is die länge ab wann eine url gekürzt werden soll
                    
            $url2 sprintf('%s...%s'substr($url018), substr($url2, -18)); // 18 ist die länge vom anfang bis zum ... und -18 die länge vom ... bis zum ende
               


               return 
            sprintf('<a href="%s%s" target="_blank">%s%s</a>',$zusatz$raw,$zusatz$url2); 

            Sieht für mich vielverpsrechend aus, wie ich den einbaue weiss ich leider nicht, das ist noch alles Neuland für mich.

            Hier mein Code um die URL´s in Links zu verwandeln :

            PHP-Code:
            function alinks ($text) {
              
            $text str_replace("http://www.","www.",$text);
              
            $text str_replace("www.","http://www.",$text);
              
            $text preg_replace("/([\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i","<A TARGET=\"_blank\" HREF=\"$1\">$1</A>"$text);
              
            $text preg_replace("/([\w-?&;#~=\.\/]+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?))/i","<A HREF=\"mailto:$1\">$1</A>",$text);
              return 
            $text;

            Kommentar


            • #7
              Ich persönlich finde es nicht schön wenn die URL zwischen / und / gekürzt wird --> darum splitte ich den String an / (kann man sicherlich auch anders machen

              Gruss

              tobi
              Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

              [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
              Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

              Kommentar


              • #8
                Also mir persöhnlich ist es egal wie er gekürzt wird, wünschenswert wäre halt ein einfacher Einbau und das er in der Mitte gekürzt wird

                Bitte um ein fertigen Code, ich check bei den ganzen gewusel nicht mehr durch, seh da im moment noch kein logischen Sinn hinter, wie bei anderen Commands...

                Kommentar


                • #9
                  Bitte um ein fertigen Code...
                  Gibt's hier nicht Etwas Eigeninitiative ist schon erforderlich

                  Gruss

                  tobi
                  Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                  [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                  Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                  Kommentar


                  • #10
                    Ich persönlich finde es nicht schön wenn die URL zwischen / und / gekürzt wird --> darum splitte ich den String an / (kann man sicherlich auch anders machen
                    Deswegen hatte ich noch einen Thread mit einer Lösung ohne explode gepostet.
                    Also mir persöhnlich ist es egal wie er gekürzt wird, wünschenswert wäre halt ein einfacher Einbau und das er in der Mitte gekürzt wird
                    Also am besten schaust du dir erstmal preg_replace_callback an. Dann baust du dir eine Funktion die wie folgt aussieht:
                    PHP-Code:
                     function callback $matches ) {
                       
                    // über print_r ( $matches ) schauen welche Teile der URL du über den REGEX bekommst
                       // URL erstellen (Indizes sind nur Beispiele)
                       
                    $url $matches ];
                       
                    $url .= substr $matches ], 0,
                          
                    strrpos $matches ], ' ', - ( strlen $matches ] ) - 20 ) ) );
                       
                    // 20 bestimmt die Länge
                       
                    return '<a href="' $matches ] . $matches ] . ">' . $url . '</a>'; 
                    Den Rest kannst du selber.
                    Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                    Kommentar


                    • #11
                      Ja mit nen Kumpel bekomm ich das evlt. noch hin. Das Problem wird das Einbauen in mein CMS sein.

                      Im Forum z.B. wird alles mit der Variablen $messages ausgegeben, da hatte ich dann einfach ein alinks($messages) draus gemacht.

                      Muss ich das mit der neuen Funktion genauso machen, oder wird es später nur eine Funktion welcher über die $message läuft ?

                      Kommentar


                      • #12
                        Regeln lesen, Code umbrechen - jetzt.
                        I don't believe in rebirth. Actually, I never did in my whole lives.

                        Kommentar

                        Lädt...
                        X