URl erkennen und kürzen

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

  • URl erkennen und kürzen

    Ich habe folgendes Problem mit dem Kürzen einer URl. Ich verwende den folgenden Code um aus einem Text eine URl zu erkennen und klickbar zu machen.
    Code:
     function make_clickable($str) {
     global $mumConf;
     $pattern = '#(^|[^\"=]{1})(http://|ftp://|mailto:|news:)([^\s<>]+)([\s\n<>]|$)#sm';
     return preg_replace($pattern,"\\1<a href=\"\\2\\3\"
     target=\"_blank\">".substr('\\2\\3',0,25)."
     ".$mumConf['marker_link']."</a>\\4",$str);
    
     }
    Problem ist, dass die URl nicht gekürzt wird. Die URl wird in voller Länge angezeigt. Ist die Kombination von preg_replace und substr in dieser Form nicht möglich oder ist da ein Fehler?
    Zuletzt geändert von Daniel1975; 06.11.2008, 07:04.

  • #2
    also erstmal fehlt in deinem pattern ein )
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      da stand doch vorhin noch ein ganz anderes pattern????
      Beantworte nie Threads mit mehr als 15 followups...
      Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

      Kommentar


      • #4
        So, jetzt klappts. Mit php-Tag wird der Code nicht richtig umgesetzt. Mit dem code-Tag klappts. Bei pattern wurde vorhin ein Smilie erkannt. Ich hatte es vergessen zu deaktivieren. Jetzt stimmt der Code eins zu eins, wie er verwendet wird.

        Frage: Wo fehlt die Klammer?

        Kommentar


        • #5
          ja in deinem ersten pattern das hier stand da fehlte ne klammer und das pattern war voll der müll, aber gut das kam durchs forum
          Beantworte nie Threads mit mehr als 15 followups...
          Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

          Kommentar


          • #6
            Du brauchst den modifier e in deinem pattern, dann wird der ersatz wie eval behandelt.
            Beantworte nie Threads mit mehr als 15 followups...
            Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

            Kommentar


            • #7
              Klappt bei mir nicht. Da kommt folgende Fehlermeldung:
              Parse error: parse error in F:\inetpub\wwwroot\dad5_oeoe\function.php(575) : regexp code on line 1
              Fatal error: Failed evaluating code: http://www.lastfm.de/group/xxxx< in F:\inetpub\wwwroot\dad5_oeoe\function.php on line 575
              Code:
              $pattern = '#(^|[^\"=]{1})(http://|ftp://|mailto:|news:)([^\s<>]+)([\s\n<>]|$)#sme';

              Kommentar


              • #8
                also ich habs probiert und bekomme es nur hin wenn ich erst Dein pattern nehme und danach nochmal mit modifier e durchjage und nur die uri zwischen <a></a> ersetze alles andere kann mit modifier e nicht evaluiert werden..
                Also quasi:
                $str = preg_replace($pattern,"\\1<a href=\"\\2\\3\"
                target=\"_blank\">".'\\2\\3'."
                </a>\\4",$str);
                und dann $pattern = $pattern.'e';
                und dann return preg_replace($pattern,"substr('\\0',0,25)",$str);
                Beantworte nie Threads mit mehr als 15 followups...
                Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                Kommentar


                • #9
                  Code:
                   function make_clickable($str) {
                    $pattern = '#(^|[^\"=]{1})(http://|ftp://|mailto:|news:)([^\s<>]+)([\s\n<>]|$)#sm';
                    $str = preg_replace($pattern,"\\1<a href=\"\\2\\3\"
                    target=\"_blank\">".'\\2\\3'."</a>[...]\\4",$str);
                    $pattern = $pattern.'e';
                    return preg_replace($pattern,"substr('\\0',0,40)",$str);
                   }
                  ergibt noch einen kleinen Fehler in den Links. Es wird immer /a> angehangen. Irgendwo wird da etwas falsch getrennt bzw. übergeben.

                  Bsp:
                  http://www.lastfm.de/group/Sebnitz+tes/a>[...]
                  http://172.21.64.111/dad5_oeoe/dokum/a>[...]

                  Kommentar


                  • #10
                    joa füg mal vo </a> ein leerzeichen ein
                    Beantworte nie Threads mit mehr als 15 followups...
                    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                    Kommentar


                    • #11
                      so klappts - wie gewollt:
                      Code:
                       //URls erkennen und clickbar machen / URls kuerzen
                       function make_clickable($str) {
                        global $mumConf;
                      
                        $pattern = '#(^|[^\"=]{1})(http://|ftp://|mailto:|news:)([^\s<>]+)([\s\n<>]|$)#sm';
                        $str = preg_replace($pattern,"\\1<a href=\"\\2\\3\"
                        target=\"_blank\"> ".'\\2\\3'." </a>&#32;<a href=\"\\2\\3\"
                        target=\"_blank\"> ".$mumConf['marker_link']." </a>\\4",$str);
                      
                        $pattern = $pattern.'e';
                        return preg_replace($pattern,"substr('\\0',0,30)",$str);
                      
                       }

                      Kommentar

                      Lädt...
                      X