"Beschneidung" von langen URLs

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

  • "Beschneidung" von langen URLs

    Hey,

    Die "Beschneidung" von langen URL's hier im Forum gefällt mir.
    Bsp.:
    http://www.google.com/search?q=PHP+s...che&lr=lang_de

    Hab da mal ein bisschen gecodet um eine derartige Funktion auch in mein Forum einzubauen, da diese ewig langen URLs unschön sind und umgebrochen werden.

    Hier mal der Code:
    PHP-Code:
    $ret preg_replace("#([\n ])([a-z]+?)://([a-z0-9\-\.,\?!%\*_\#:;~\\&$@\/=\+]+)#i""\\1<a href=\"\\2://\\3\" target=\"_blank\">" url_len("\\2""\\3") . "</a>"$ret);

    function 
    url_len($url1$url2)
    {
        
    $url $url1 '://' $url2;
        
    $url_len strlen$url );

    [...]

    Soweit funktioniert es auch bis auf das Zählen der Zeichen in der URL.
    PHP-Code:
    $url $url1 '://' $url2;
    $url_len strlen$url ); 
    $url_len ergibt stets 7 da

    \2=2
    +
    \3=2
    +
    ://=3
    ------
    =7
    gezählt wird.

    Wie kann ich den Inhalt von /2 und /3 zählen.

    TIA
    elo
    > Was ist der Sinn einer Sig?
    Tja. Das kann ich Dir jetzt auch gerade nicht sagen.
    Aber eine Gute Frage. Darf ich die als Signatur verwenden?
    (Joachim Jäger, Nils Ketelsen in de.newusers.questions)

  • #2
    Also ich weiss ja nicht ob da ein einfaches substring nicht genügt hätte...
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      warum überlegst du dir nich wie lang deine urls max. sein dürfen

      sind sie länger nimmst du die ersten x zeichen, machst dann 3 punkte und danach die letzten y zeichen, so dass
      x + strlen('...')+y = max_laenge
      Ich denke, also bin ich. - Einige sind trotzdem...

      Kommentar


      • #4
        nimmst du den
        Code:
        preg_replace("#[\n ]([a-z]+?://[a-z0-9-.,?!%*_\#:;~\&$@/=+]+)#ie",
        	"strlen('\\1')<40?'<a href=\"\\1\">\\1</a>':('<a href=\"\\1\">'.substr('\\1',0,15).'...'.substr('\\1',strlen('\\1')-15).'</a>')",
        	$ret);
        ersetzt alles ab eine Länge von 40 Zeichen,
        und läßt vorn und hinten jeweils 15 Zeichen stehen
        TBT

        Die zwei wichtigsten Regeln für eine berufliche Karriere:
        1. Verrate niemals alles was du weißt!


        PHP 2 AllPatrizier II Browsergame

        Kommentar


        • #5
          @mrhappiness

          Na das ging aber fix

          warum überlegst du dir nich wie lang deine urls max. sein dürfen

          sind sie länger nimmst du die ersten x zeichen, machst dann 3 punkte und danach die letzten y zeichen, so dass
          x + strlen('...')+y = max_laenge
          Aber das tue ich doch und darum geht es bei meinem Problem doch nicht.

          Lies dir mein Eingangsposting bitte nocheinmal durch.

          Ich kann die Länge nicht ermitteln.
          Dort wo das"[...]" ist steht der Code für die Kürzung, den ich, da er hier nicht Wichtig ist, herausgenommen habe.

          Gruss,
          elo
          > Was ist der Sinn einer Sig?
          Tja. Das kann ich Dir jetzt auch gerade nicht sagen.
          Aber eine Gute Frage. Darf ich die als Signatur verwenden?
          (Joachim Jäger, Nils Ketelsen in de.newusers.questions)

          Kommentar


          • #6
            ich wollte damit sagen, dass du das ohne preg_replace machst, sondern mehr so in der art
            PHP-Code:
            $title=$ret;
            if (
            strlen($title)>50)
              
            $title=substr($title,0,20).'...'+substr($title,-10);
            echo 
            '<a href="'.$ret.'">'.$title.'</a>'
            oder du probierst TBTs Variante
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              @TBT

              Original geschrieben von TBT
              Code:
              preg_replace("#[\n ]([a-z]+?://[a-z0-9-.,?!%*_\#:;~\&$@/=+]+)#ie",
              	"strlen('\\1')<40?'<a href=\"\\1\">\\1</a>':('<a href=\"\\1\">'.substr('\\1',0,15).'...'.substr('\\1',strlen('\\1')-15).'</a>')",
              	$ret);
              Funktioniet bei mir nicht ganz aber der Lösungsansatz gefält mir
              Manchmal denke ich hat zu kompliziert und dann bedarf es eines Hinweises.

              So erspare ich mir die komplette Funktion.

              Elo dankt
              > Was ist der Sinn einer Sig?
              Tja. Das kann ich Dir jetzt auch gerade nicht sagen.
              Aber eine Gute Frage. Darf ich die als Signatur verwenden?
              (Joachim Jäger, Nils Ketelsen in de.newusers.questions)

              Kommentar


              • #8
                @mrhappiness

                Auch dir en dankeschön auch wenn Du mein Problem nicht erkannt hast

                Dies hier wäre meine Lösung:
                PHP-Code:
                    if( $url_len 54 )
                    {
                        
                $url_str1 substr$url035 ) . "...";
                        
                $url_str2 substr$url$url_len 15$url_len );

                        
                $url $url_str1 $url_str2;
                    } 
                TBT's Lösung gefällt mir, daher werde ich diese schon zum Laufen bekommen.

                Es grüßt elo
                > Was ist der Sinn einer Sig?
                Tja. Das kann ich Dir jetzt auch gerade nicht sagen.
                Aber eine Gute Frage. Darf ich die als Signatur verwenden?
                (Joachim Jäger, Nils Ketelsen in de.newusers.questions)

                Kommentar


                • #9
                  Original geschrieben von Elo
                  @mrhappiness

                  Auch dir en dankeschön auch wenn Du mein Problem nicht erkannt hast
                  bitte, gerne doch, aber dein problem hab ich durchaus verstanden

                  mein code macht das gleiche wie deiner nur anders geschrieben (und andere zahlen *g*)
                  Ich denke, also bin ich. - Einige sind trotzdem...

                  Kommentar


                  • #10
                    @mrhappiness

                    aber dein problem hab ich durchaus verstanden
                    Glaube ich nicht ganz

                    PHP-Code:
                    if (strlen($title)>50
                    Genau diese Abfrage habe ich auch

                    PHP-Code:
                        $url_len strlen$url );

                        if( 
                    $url_len 54 
                    und hier hat es gehappert, da die Länge des Strings nicht über die Funktion strlen ermittelt werden konnte.
                    Warum nicht weisst ich auch nicht und würde mich auch noch immer interessieren. Es kann ja immer mal wieder ein derartiger Fall auftretten und man wüsste dann woran es liegt.

                    elo
                    > Was ist der Sinn einer Sig?
                    Tja. Das kann ich Dir jetzt auch gerade nicht sagen.
                    Aber eine Gute Frage. Darf ich die als Signatur verwenden?
                    (Joachim Jäger, Nils Ketelsen in de.newusers.questions)

                    Kommentar


                    • #11
                      strlen zählt da schon richtig, du übergibst an deine funktion url_len ja zwei strings mit je 2 zeichen länge
                      und strlen('\2://\3') is numal 7, da du da sieben zeichen drin hast!


                      daher läuft mein code auch völlig ohne regulären ausdruck
                      Ich denke, also bin ich. - Einige sind trotzdem...

                      Kommentar


                      • #12
                        Genau. Nun möchte ich dies jedoch über eine reguläre Ausdruck realisieren und übergebe /2 und /3 an die Funktion mit url_len("\2", "\3")

                        In der Funktion übergebe ich den Inhalt von/2 und /3 dann den Variablen url1 und url2.

                        Gebe ich ein:
                        PHP-Code:
                        $url $url1 '://' $url2;
                        return 
                        $url
                        gibt es als Ergebniss die vollständige URL.
                        Ergo müssen die beiden Teilstrings doch in der Funkton sein nur kann ich den Inhalt (der Url) nicht zähen

                        Es wird stets /2 und /3 als jeweils 2 gezählt.

                        Das ist das womit ich nicht zurecht komme.
                        Ich hoffe dies kommt verständlich rüber.

                        elo
                        > Was ist der Sinn einer Sig?
                        Tja. Das kann ich Dir jetzt auch gerade nicht sagen.
                        Aber eine Gute Frage. Darf ich die als Signatur verwenden?
                        (Joachim Jäger, Nils Ketelsen in de.newusers.questions)

                        Kommentar


                        • #13
                          So habe die RegEx soweit fertig und habe nun genau daselbe Problem wie im Eingangsposting.
                          Strlen kann nicht die Länge der Teilstrings //2//3 ermitteln.

                          Hier mal die RegEx.
                          Code:
                          $ret = preg_replace("#([\n ])([a-z]+?)://([a-z0-9\-\.,\?!%\*_\#:;~\\&$@\/=\+]+)#i", "'".$url = (strlen('\\2\\3') < 54) ? '\\1<a href=\"\\2://\\3\" target=\"_blank\">\\2://\\3</a>' : ('\\1<a href=\"\\2://\\3\" target=\"_blank\">\\2://' . substr('\\3', 0, 35) . '...' . substr('\\3',strlen('\\3')-15) . '</a>')."'", $ret);
                          IMO der richtige Zeitpunkt den Selbstzweifeln zu verfallen.

                          Ich weiss, das dies ein riesiges Problem ist, wäre dennoch echt toll wenn wir das Lösen könnten.

                          gruss,
                          elo
                          > Was ist der Sinn einer Sig?
                          Tja. Das kann ich Dir jetzt auch gerade nicht sagen.
                          Aber eine Gute Frage. Darf ich die als Signatur verwenden?
                          (Joachim Jäger, Nils Ketelsen in de.newusers.questions)

                          Kommentar


                          • #14
                            Also ich verstehe nicht warum Du solch ein regex machst, bei dem man sich leicht verhaspeln kann wenn es nicht wirklich notwendig ist.
                            Du willst die Länge der URL verkürzen, ne url ist ein String also benutze doch string funktionen.

                            strlen, substr sind Deine Freunde.
                            Beantworte nie Threads mit mehr als 15 followups...
                            Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                            Kommentar


                            • #15
                              Hey Leutz,

                              Das Problem habe ich inzwischen, auch durch Hilfe der Newsgroup d.c.l.p.m, gelöst.

                              Durch einen Hinweis dort auf den Modifier 'e' werden nun durch das Script lange URL's ala:
                              Code:
                              http://www.google.com/search?q=PHP+script+resource+Forum&ie=ISO-8859-1&hl=de&btnG=Google+Suche&lr=lang_de
                              wie folgt gekürzt:
                              Code:
                              http://www.google.com/[...]uche&lr=lang_de
                              Selbstverständlich mit dem entsp. langen Link dahinter

                              Wie zu sehen ist wird die URL mit Domain und den letzten 15 Zeichen dargestellt und das bei allen URL's deren Pfad nach der Domain länger als 21 Zeichen ist.

                              gruss,
                              elo
                              > Was ist der Sinn einer Sig?
                              Tja. Das kann ich Dir jetzt auch gerade nicht sagen.
                              Aber eine Gute Frage. Darf ich die als Signatur verwenden?
                              (Joachim Jäger, Nils Ketelsen in de.newusers.questions)

                              Kommentar

                              Lädt...
                              X