klaus: URLs verkürzen

moin!

ich bin auf der suche nach einer string cutter funktion, die mir lange urls in meinen forumthreads/kommentaren/usw. verkürzt. und zwar nicht auf herkömmliche art und weise, dass aus www.sehrlangeurl.de -> www.sehr... wird sondern:

aus www.loool.de/rofl/dngng/index/home/jsdgn/js/moin/jdng.htm?jdng&njsdng=nsdgn

soll www.loool.de/...jsdng=nsdgn gemacht werden.

hat dafür schon jemand eine fertige funktion ?

vielen dank!!!

  1. moin!

    'n Abend,

    hat dafür schon jemand eine fertige funktion ?

    fertig nicht, aber die Idee ist doch simpel: Nimm den URL als String, und schneide abhängig von der Länge den Anfang weg und ersetze ihn durch Punkte.

    Gruß, Volker

  2. Lieber klaus,

    verstehe ich Dich richtig, dass am Ende Deiner Verkürzung keine Auslassungspunkte, sondern sinnvoller String-Inhalt stehen soll? Also dass immer ein String in der Art "www.exaple...param=xyz" stehen soll?

    Dann brauchst Du eine Maximal-Länge (Zeichenlänge) für die anzuzeigende URL.
    1.) Die jeweilige URL wird überprüft, ob sie die maximale Länge überschreitet.
    1a) wenn nicht, bleibt sie unverändert.
    2.) Du errechnest die Anzahl an auszulassenden Zeichen.
    3.) Du bestimmst die Anfangszeichen und die Endzeichen des Strings und verknüpfst sie mit "..."
    4.) Fertig.

    function kurzURL($oStr) {  
        // $oStr = 'http://www.example.com/dir/subdir/subsubdir/subsubsubdir/file.ext?param1=xyz&param2=yz&param3=z';  
      
        $maxLen = 15; // Es werden maximal 15 Zeichen des originalen Strings angezeigt (8 am Anfang, 7 am Ende).  
      
        $kurzURL = preg_replace('~^(?i)http://~', '', $oStr); // Protokoll entfernen falls vorhanden  
        $kurzURL = substr($kurzURL, 0, ceil($maxLen/2)).'...'; // erste "Hälfte" des Strings  
        $kurzURL .= substr($oStr, - floor($maxLen/2)); // letzte "Hälfte" des Strings  
        return $kurzURL;  
    }
    

    Das könnte man vielleicht auch wesentlich eleganter mit nur einer RegExp machen, aber ich bin jetzt zu müde, mir das genauer auszudenken. Code ist übrigens ungetestet!

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Hallo Felix.

      function kurzURL($oStr) {

      // $oStr = 'http://www.example.com/dir/subdir/subsubdir/subsubsubdir/file.ext?param1=xyz&param2=yz&param3=z';

      $maxLen = 15; // Es werden maximal 15 Zeichen des originalen Strings angezeigt (8 am Anfang, 7 am Ende).

      $kurzURL = preg_replace('~^(?i)http://~', '', $oStr); // Protokoll entfernen falls vorhanden
          $kurzURL = substr($kurzURL, 0, ceil($maxLen/2)).'...'; // erste "Hälfte" des Strings
          $kurzURL .= substr($oStr, - floor($maxLen/2)); // letzte "Hälfte" des Strings
          return $kurzURL;
      }

        
      Mein Vorschlag:  
        
      ~~~php
      function kurzURL($oStr) {  
        
        // $oStr = 'http://www.example.com/dir/subdir/subsubdir/subsubsubdir/file.ext?param1=xyz&param2=yz&param3=z';  
        
        $kurzURL = 'http://www.example.com/...' . substr($oStr, strpos($oStr, '?'));  
        
        return $kurzURL;  
      }
      

      Einen schönen Montag noch.

      Gruß, Mathias

      --
      ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
      debian/rules
      1. *kicher*

        Einen schönen Montag noch.

        Mir faellt grad auf:
        Klingt etwas besser, als 'eine schoene viertel Stunde noch'. :D

        1. Hallo Steel.

          Einen schönen Montag noch.

          Mir faellt grad auf:
          Klingt etwas besser, als 'eine schoene viertel Stunde noch'. :D

          Ja, hätte etwas Apokalyptisches …

          Und einen schönen Dienstag noch.

          Gruß, Mathias

          --
          ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
          debian/rules
  3. (Hallo|Hi(ho)|Tag) klaus,

    ich bin auf der suche nach einer string cutter funktion, die mir lange urls in meinen forumthreads/kommentaren/usw. verkürzt.
    ...
    aus www.loool.de/rofl/dngng/index/home/jsdgn/js/moin/jdng.htm?jdng&njsdng=nsdgn
    soll www.loool.de/...jsdng=nsdgn gemacht werden.

    hat dafür schon jemand eine fertige funktion ?

    Meinst du sowas?

      
    function shorten_string(  
      $string = EMPTY_STRING,  
      $max_len = 60, /// max_length  
      $ellipse = '[...]' /// das/die Auslassungszeichen  
    ) {  
      $len_string = strlen($string);  
      
      if ($len_string <= $max_len) return $string;  
      
      $len_ellip = strlen($ellipse);  
      
      $len_head = ($max_len - $len_ellip) >> 1; // string part before ellipse part  
      $len_tail = $max_len - $len_ellip - $len_head; // string part after ellipse part  
      
      return $string = substr($string, 0, $len_head) . $ellipse . substr($string, $len_string - $len_tail);  
    }  
    
    

    Dabei ist $max_len die maximale Länge, die der Gesamt-String haben darf. Die restlichen Längen berechnet die Funktion alleine.

    MffG
    EisFuX