Jeena Paradies: Umbruch bei zu langen Links im Mozilla

Hallo,

Wie kriege ich es hin dass zu lange Links auch im Mozilla umgebrochen werden und nicht über den Rand gehen?
http://jeenaparadies.servebeer.com/open/Webs/jeenas-home5/

Die zu langen Links werden aber von Besuchern eingetragen und ich ändere sie dann mit der funktion (ich habe sie von http://www.dclp-faq.de/q/q-regexp-uri-klickbar.html):

// URI anklickbar machen
function replace_uri($str) {
  $pattern = '#(^|[^"=]{1})(http://|ftp://|mailto:|news:)([^\s<>]+)([\s\n<>]|$)#sm';
  return preg_replace($pattern,"\1<a href="\2\3"><u>\2\3</u></a>\4",$str);
}

Leider habe ich keine Ahnung wie ich da ein <br /> oder so was reibringe, was auch ein wenig blöd wäre denn die Textgröße kann ich ja nicht herausfinden wenn jemand auf 200% vergrößert ist ja weniger Platz da also müsste ich schon vorcher umbrechen wen jemand auf 75% stellt dann müsste es später abbrechen. Es müsste also irgendwie per css geschehen aber ich finde keine Lösung.

Grüße
Jeena Paradies

--
Ich bin mir ziemlich sicher dass es im Leben mehr gibt als nur wirklich wirklich gut auszusehen ...
<img src="http://home.arcor.de/vivosomuertos/self/zoolander.jpg" border="0" alt="">
Bambergs Fasching - nur ein großer (Werbe-)Flop?
http://jeenaparadies.de/artikel/fasching/
Jeenas Bannertauschportal; selbstgemacht ;-)
http://jeenasbannerbude.de
  1. Hallo,

    http://jeenaparadies.servebeer.com/open/Webs/jeenas-home5/

    Es sollte heißen:
    http://jeenaparadies.servebeer.com/open/Webs/jeenas-home5/weblog/index.php#13

    Grüße
    Jeena Paradies

    --
    Ich bin mir ziemlich sicher dass es im Leben mehr gibt als nur wirklich wirklich gut auszusehen ...
    <img src="http://home.arcor.de/vivosomuertos/self/zoolander.jpg" border="0" alt="">
    Bambergs Fasching - nur ein großer (Werbe-)Flop?
    http://jeenaparadies.de/artikel/fasching/
    Jeenas Bannertauschportal; selbstgemacht ;-)
    http://jeenasbannerbude.de
    1. Hi,

      http://jeenaparadies.servebeer.com/open/Webs/jeenas-home5/
      Es sollte heißen:
      http://jeenaparadies.servebeer.com/open/Webs/jeenas-home5/weblog/index.php#13

      Ah! Jetzt weiß ich was Du meinst...

      Gib halt nicht die gesamte URL als klickbaren Text an, sondern nur die ersten 30 Zeichen oder so (ggf. noch mit ...)

      cu,
      Andreas

      --
      MudGuard? Siehe http://www.Mud-Guard.de/
      Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
      1. Hallo,

        Gib halt nicht die gesamte URL als klickbaren Text an, sondern nur die ersten 30 Zeichen oder so (ggf. noch mit ...)

        Könntest du mit eventuell eine Seite zeigen aus welcher ich lernen kann damit umzugehen? Ich kapiere von der Funktion nichts. Und beschrieben ist auch nichts. Außerdem suche ich anscheinend mit den falschen suchwörtern nach einer Lösung meines Problemes.

        Grüße
        Jeena Paradies

        --
        Ich bin mir ziemlich sicher dass es im Leben mehr gibt als nur wirklich wirklich gut auszusehen ...
        <img src="http://home.arcor.de/vivosomuertos/self/zoolander.jpg" border="0" alt="">
        Bambergs Fasching - nur ein großer (Werbe-)Flop?
        http://jeenaparadies.de/artikel/fasching/
        Jeenas Bannertauschportal; selbstgemacht ;-)
        http://jeenasbannerbude.de
        1. Hi,

          Gib halt nicht die gesamte URL als klickbaren Text an, sondern nur die ersten 30 Zeichen oder so (ggf. noch mit ...)
          Könntest du mit eventuell eine Seite zeigen aus welcher ich lernen kann damit umzugehen? Ich kapiere von der Funktion nichts. Und beschrieben ist auch nichts. Außerdem suche ich anscheinend mit den falschen suchwörtern nach einer Lösung meines Problemes.

          Deine jetzige Funktion:

          function replace_uri($str) {
            $pattern = '#(^|[^"=]{1})(http://|ftp://|mailto:|news:)([^\s<>]+)([\s\n<>]|$)#sm';
            return preg_replace($pattern,"\1<a href="\2\3"><u>\2\3</u></a>\4",$str);
          }

          $pattern = '#(^|[^"=]{1})(http://|ftp://|mailto:|news:)([^\s<>]+)([\s\n<>]|$)#sm';

          dient als Trennzeichen des Regulären Ausdrucks, sowohl am Anfang als auch am Ende, ganz am Ende noch die Optionen zum Pattern.

          Dazwischen (zwischen den beiden ##) kommen die verschiedenen Teile (geklammert):

          1: (^|[^"=]{1})
          Stringanfang oder ein von " und = verschiedenes Zeichen

          2: (http://|ftp://|mailto:|news:)
          Das Protokoll der URL (das würde ich noch um https:// ergänzen zu (http://|ftp://|mailto:|news:|https://)

          3: ([^\s<>]+)
          beliebig viele Zeichen, die aber weder Space noch < noch > sind - die URL mit Ausnahme des Protokolls

          4: ([\s\n<>]|$)
          ein Space oder Zeilenende oder < oder > oder das Stringende.

          Diese durchnumerierten Teile werden beim replace wieder eingesetzt, siehe die \ gefolgt von Nummern (der doppelte \ ist notwendig, weil ein \ ja von PHP als Escape-Zeichen verwendet wird).

          Du willst jetzt den 3. Teil in 2 Teile aufspalten: zuerst bis zu 30 Zeichen, die Du für den klickbaren Text benutzt, danach der Rest der URL.
          Da das ein Teil mehr ist, bekommt der bisherige Teil 4 die neue Nummer 5

          3 neu: ([^\s<>]{1,30})
          maximal 30 Zeichen der URL

          4 neu: ([^\s<>]*)
          die restlichen Zeichen der URL, falls vorhanden

          5 neu = 4 alt: ([\s\n<>]|$)
          ein Space oder Zeilenende oder < oder > oder das Stringende.

          Zusammengesetzt also
            $pattern = '#(^|[^"=]{1})(http://|ftp://|mailto:|news:|https://)([^\s<>]{1,30})([\s\n<>]|$)([\s\n<>]|$)#sm';

          In der replace-Anweisung
            return preg_replace($pattern,"\1<a href="\2\3"><u>\2\3</u></a>\4",$str);
          muß natürlich jetzt berücksichtigt werden, daß der alte Teil 3 aufgesplittet wurde und der bisherige 4. Teil jetzt Teil 5 ist.

          return preg_replace($pattern,"\1<a href="\2\3\4"><u>\2\3...</u></a>\5",$str);

          Im href müssen jetzt die Teile 2, 3 und 4 stehen, denn diese bilden die URL.
          Im Link drin stehen die Teile 2 (Protokoll) und 3 (erste 30 Zeichen der URL) sowie 3 Punkte (die erscheinen immer, auch wenn die URL kürzer ist - kannst Du auch einfach weglassen - da fällt mir im Moment keine Möglichkeit ein, die nur dann einzubinden, wenn Teil 4 nichtleer ist)
          Nach dem Link steht jetzt Teil 5 statt Teil 4 (weil durch die Aufteilung der URL sich die Numerierung verschiebt.

          Ich würde dann noch das u-Element rausschmeißen - dafür gibt es ja CSS, um den Link zu unterstreichen:

          $pattern = '#(^|[^"=]{1})(http://|ftp://|mailto:|news:|https://)([^\s<>]{1,30})([\s\n<>]|$)([\s\n<>]|$)#sm';
            return preg_replace($pattern,"\1<a href="\2\3\4">\2\3</a>\5",$str);

          cu,
          Andreas

          --
          MudGuard? Siehe http://www.Mud-Guard.de/
          Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
          1. Hallo,

            vielen Dank für deine Ausführliche Erklärung. Damit und mit dem Link von AllesMeins (http://www.dclp-faq.de/q/q-regexp-bauelemente.html) fällt es mir jetzt nicht mehr so schweer das kryptische zu entziffern. Zwar funktioniert es noch nicht, es wird gar kein Link eingesetzt aber dass müsste ja dann auch noch hinzubekommen sein. Das einzige was ich noch nicht ganz kapiere und irgendwie denke dass es daran liegt ist das:

            4 neu: ([^\s<>]*)
            die restlichen Zeichen der URL, falls vorhanden

            Woher weiß der ab wo er weiter suchen muss?

            Versthe ich das dann auch richtig dass bei

            preg_replace($pattern,"\1<a href="\2\3\4">\2\3</a>\5",$str);

            der Rest des Links überhaupt nicht mehr angezeigt wird? Das mit den Pünktchen könnte ich ja vorher abfragen ob es mehr als 30 Zeichen sind und dann per if in einen String entweder "..." oder "" reinschreiben. Diesen könnte ich dann einsetzen und wenn es länger ist dann werden die Punkte angefügt wenn kürzer nicht.

            Jetzt fehlt mir aber noch dass es funktioniert.

            Grüße
            Jeena Paradies

            --
            Ich bin mir ziemlich sicher dass es im Leben mehr gibt als nur wirklich wirklich gut auszusehen ...
            <img src="http://home.arcor.de/vivosomuertos/self/zoolander.jpg" border="0" alt="">
            Bambergs Fasching - nur ein großer (Werbe-)Flop?
            http://jeenaparadies.de/artikel/fasching/
            Jeenas Bannertauschportal; selbstgemacht ;-)
            http://jeenasbannerbude.de
            1. Hallo,

              Warum will die Funktion nicht arbeiten?

              function rewrite_url($str) {
                $pattern = '#(^|[^"=]{1})(http://|ftp://|mailto:|news:|https://)([^\s<>]{1,30})([\s\n<>]|$)([\s\n<>]|$)#sm';
                return preg_replace($pattern,"\1<a href="\2\3\4">\2\3</a>\5",$str);
              }

              Grüße
              Jeena Paradies

              --
              Ich bin mir ziemlich sicher dass es im Leben mehr gibt als nur wirklich wirklich gut auszusehen ...
              <img src="http://home.arcor.de/vivosomuertos/self/zoolander.jpg" border="0" alt="">
              Bambergs Fasching - nur ein großer (Werbe-)Flop?
              http://jeenaparadies.de/artikel/fasching/
              Jeenas Bannertauschportal; selbstgemacht ;-)
              http://jeenasbannerbude.de
              1. Hi,

                Warum will die Funktion nicht arbeiten?

                Soll das die Fehlerbeschreibung sein?

                Was ist die Eingabe, was ist die Ausgabe?
                Oder wirft der Interpreter ne Fehlermeldung? Wenn ja, welche?

                function rewrite_url($str) {
                  $pattern = '#(^|[^"=]{1})(http://|ftp://|mailto:|news:|https://)([^\s<>]{1,30})([\s\n<>]|$)([\s\n<>]|$)#sm';
                  return preg_replace($pattern,"\1<a href="\2\3\4">\2\3</a>\5",$str);
                }

                cu,
                Andreas

                --
                MudGuard? Siehe http://www.Mud-Guard.de/
                Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
                1. Hallo,

                  Soll das die Fehlerbeschreibung sein?

                  Sorry werde ich in Zukunft besser machen.

                  Was ist die Eingabe, was ist die Ausgabe?
                  Oder wirft der Interpreter ne Fehlermeldung? Wenn ja, welche?

                  Keine Fehlermeldung. Es wird einfach kein Link außenrum eingefügt.

                  Eine Seite mit der neuen Funktion
                  http://jeenaparadies.servebeer.com/open/Webs/jeenas-home5/weblog/index.php#13

                  Die gleiche Seite mit der alten Funktion:
                  http://jeenaparadies.servebeer.com/open/Webs/jeenas-home5/weblog/kommentar.php#13

                  Grüße
                  Jeena Paradies

                  --
                  Ich bin mir ziemlich sicher dass es im Leben mehr gibt als nur wirklich wirklich gut auszusehen ...
                  <img src="http://home.arcor.de/vivosomuertos/self/zoolander.jpg" border="0" alt="">
                  Bambergs Fasching - nur ein großer (Werbe-)Flop?
                  http://jeenaparadies.de/artikel/fasching/
                  Jeenas Bannertauschportal; selbstgemacht ;-)
                  http://jeenasbannerbude.de
              2. Hi,

                function rewrite_url($str) {
                  $pattern = '#(^|[^"=]{1})(http://|ftp://|mailto:|news:|https://)([^\s<>]{1,30})([\s\n<>]|$)([\s\n<>]|$)#sm';

                Der Teil nach der {1,30} stimmt nicht, da müssen ja für den Fall, daß die URL länger ist, nochmal die gleichen Zeichen gesucht werden wie bei den ersten 30:

                $pattern = '#(^|[^"=]{1})(http://|ftp://|mailto:|news:|https://)([^\s<>]{1,30})([^\s<>]*)([\s\n<>]|$)#sm';

                cu,
                Andreas

                --
                MudGuard? Siehe http://www.Mud-Guard.de/
                Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
                1. Hallo,

                  Der Teil nach der {1,30} stimmt nicht, da müssen ja für den Fall, daß die URL länger ist, nochmal die gleichen Zeichen gesucht werden wie bei den ersten 30:

                  Es funktioniert zwar jetzt sehr gut, aber warum das kapiere ich noch nicht. Aber vieleicht wenn ich mich noch einwenig mehr damit befasst habe.

                  $pattern = '#(^|[^"=]{1})(http://|ftp://|mailto:|news:|https://)([^\s<>]{1,30})([^\s<>]*)([\s\n<>]|$)#sm';

                  Vielen Dank für deine Mühe.

                  Grüße
                  Jeena Paradies

                  --
                  Ich bin mir ziemlich sicher dass es im Leben mehr gibt als nur wirklich wirklich gut auszusehen ...
                  <img src="http://home.arcor.de/vivosomuertos/self/zoolander.jpg" border="0" alt="">
                  Bambergs Fasching - nur ein großer (Werbe-)Flop?
                  http://jeenaparadies.de/artikel/fasching/
                  Jeenas Bannertauschportal; selbstgemacht ;-)
                  http://jeenasbannerbude.de
  2. aloha heja he

    Wie kriege ich es hin dass zu lange Links auch im Mozilla umgebrochen werden und nicht über den Rand gehen?
    http://jeenaparadies.servebeer.com/open/Webs/jeenas-home5/

    // URI anklickbar machen
    function replace_uri($str) {
      $pattern = '#(^|[^"=]{1})(http://|ftp://|mailto:|news:)([^\s<>]+)([\s\n<>]|$)#sm';
      return preg_replace($pattern,"\1<a href="\2\3"><u>\2\3</u></a>\4",$str);
    }

    Leider habe ich keine Ahnung wie ich da ein <br /> oder so was reibringe, was auch ein wenig blöd wäre denn die Textgröße kann ich ja nicht herausfinden wenn jemand auf 200% vergrößert ist ja weniger Platz da also müsste ich schon vorcher umbrechen wen jemand auf 75% stellt dann müsste es später abbrechen. Es müsste also irgendwie per css geschehen aber ich finde keine Lösung.

    Eine Loesung wirst Du bei Vergroesserung nicht finden. Ich wuerde fuer die Anzeige nicht die komplette URL nehmen, sondern einen verkuerzten String.

    Achja, ein unschoener Effekt bei Artikel/webdesign am Ende

    Warning: main(../../scripte/kommentar.php): failed to open stream: No such file or directory in /home/jeena/Webs/jeenas-home5/artikel/webdesign/index.php on line 257

    Warning: main(): Failed opening '../../scripte/kommentar.php' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /home/jeena/Webs/jeenas-home5/artikel/webdesign/index.php on line 257

    man liest sich
    Wilhelm

    1. Hallo,

      Eine Loesung wirst Du bei Vergroesserung nicht finden. Ich wuerde fuer die Anzeige nicht die komplette URL nehmen, sondern einen verkuerzten String.

      Und wenn dann wohl nur mit extrem JavaScript was ich überhaupt nicht kenne. Irgendwie komme ich aber mit der

      function replace_uri($str) {
        $pattern = '#(^|[^"=]{1})(http://|ftp://|mailto:|news:)([^\s<>]+)([\s\n<>]|$)#sm';
        return preg_replace($pattern,"\1<a href="\2\3"><u>\2\3</u></a>\4",$str);
      }

      überhaupt nicht zurecht. Für mich sind das noch Hieroglyphen und ich verstehe überhaupt nicht was ich da ändern muss.

      Achja, ein unschoener Effekt bei Artikel/webdesign am Ende

      Vielen Dank das weiß ich schon da dort auch - wenn ich die Kommentarfunktion fertig Programmiert habe - diese hinkommt. Noch ist eine andere drin die jetzt nicht mehr funktioniert.

      Grüße
      Jeena Paradies

      --
      Ich bin mir ziemlich sicher dass es im Leben mehr gibt als nur wirklich wirklich gut auszusehen ...
      <img src="http://home.arcor.de/vivosomuertos/self/zoolander.jpg" border="0" alt="">
      Bambergs Fasching - nur ein großer (Werbe-)Flop?
      http://jeenaparadies.de/artikel/fasching/
      Jeenas Bannertauschportal; selbstgemacht ;-)
      http://jeenasbannerbude.de
      1. Hiho,

        Und wenn dann wohl nur mit extrem JavaScript was ich überhaupt nicht kenne.

        Nein, mit einer serverseitigen Sprache wie z.b. PHP.

        Irgendwie komme ich aber mit der

        function replace_uri($str) {
          $pattern = '#(^|[^"=]{1})(http://|ftp://|mailto:|news:)([^\s<>]+)([\s\n<>]|$)#sm';
          return preg_replace($pattern,"\1<a href="\2\3"><u>\2\3</u></a>\4",$str);
        }
        überhaupt nicht zurecht. Für mich sind das noch Hieroglyphen und ich verstehe überhaupt nicht was ich da ändern muss.

        Das ist ein Suchmuster. Im allgemeinen sucht der nur nach etwas das mit http://, ftp://, mailto: oder news: anfängt und ersetzte das ganze durch ein <A HREF="ADRESSE"><u>ADRESSE</u></A>. Wie genau ds abläuft ist hier 1 ganz gut erklärt.
        Versuch das mal zu lernen, dann solltest du es auch hin bekommen den Kram beim Ersetzten durch eine zusätzliche Funktion zu jagen, die den Link auf z.b. 20Zeichen kürzt und ein ... dranhängt.

        Grüsse

        Marc

        1. Hallo,

          Nein, mit einer serverseitigen Sprache wie z.b. PHP.

          Ich bezog mich dabei auf die Schriftvergrößerung im Browser.

          Vielen Dank für den Link, der bringt mich schon viel weiter. Zusammen mit MudGuards erklärungen werde ich jetzt hoffentlich dahinter kommen so dass ich dann öfters suchen und ersetzen benutzen kann.

          Grüße
          Jeena Paradies

          --
          Ich bin mir ziemlich sicher dass es im Leben mehr gibt als nur wirklich wirklich gut auszusehen ...
          <img src="http://home.arcor.de/vivosomuertos/self/zoolander.jpg" border="0" alt="">
          Bambergs Fasching - nur ein großer (Werbe-)Flop?
          http://jeenaparadies.de/artikel/fasching/
          Jeenas Bannertauschportal; selbstgemacht ;-)
          http://jeenasbannerbude.de