Ankündigung

Einklappen
Keine Ankündigung bisher.

Zeilenumbruch

Einklappen

Neue Werbung 2019

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

  • Zeilenumbruch

    Hallo,

    ich tüftel schon seit Tagen an einer Lösung für folgendes Problem:

    Ein langer Text soll jeweils nach dem letzen Wort vor 80 Zeichen umbebrochen werden. Das entsprechende, dem Wort folgende Leerzeichen, soll dann entfernt und durch ein <br /> ersetzt werden.

    Wie könnte man das am einfachsten umsetzen?

    Viele Grüße


  • #2
    Hi,


    indem du eine Schleife baust und mit strlen(), substr(), str_replace und strrpos() arbeitest. Mehr Infos dazu im Manual.

    Gruß
    Cy

    Kommentar


    • #3
      Zitat von cycap Beitrag anzeigen
      Hi,


      indem du eine Schleife baust und mit strlen(), substr(), str_replace und strrpos() arbeitest. Mehr Infos dazu im Manual.

      Gruß
      Cy
      Danke, werde ich mal schauen.


      Mein Code sieht zur Zeit so aus (noch mit 72 Zeichen, aber das ist ja egal):

      Code:
              // automatischer Wort-Zeilenumbruch bei Satzlängen über 72 Zeichen pro Zeile
              $limit_string = explode("\n", $input);
              $j = 72;
              foreach($limit_string as $key) {
                  if(strlen($key) >= 73) {
                      for($i = 1; $i <= 73; $i++) {
                          if(substr($key, $i, 1) == " ") {
                              $j = $i;
                          }
                      }
                      $key = substr($key, 0, $j) . "\n" . substr($key, $j+1, strlen($key));
                  }
                  $keys[] = $key;
              }
              $input = implode("\n", $keys);
      Den ersten Umbruch macht er aber bei längeren Texten bekomme ich das noch nicht korrekt hin.

      Kommentar


      • #4
        Zitat von crsc Beitrag anzeigen
        Ein langer Text soll jeweils nach dem letzen Wort vor 80 Zeichen umbebrochen werden. Das entsprechende, dem Wort folgende Leerzeichen, soll dann entfernt und durch ein <br /> ersetzt werden.
        Ist das nicht das Standardverhalten von wordwrap()?
        PHP: wordwrap - Manual

        Falls du es dir doch irgendwie anders wünschst, findest du dort in den user contributed notes noch einige Lösungsvorschläge.
        Create your own quiz show.

        Kommentar


        • #5
          Zitat von agrajag Beitrag anzeigen
          Ist das nicht das Standardverhalten von wordwrap()?
          PHP: wordwrap - Manual

          Falls du es dir doch irgendwie anders wünschst, findest du dort in den user contributed notes noch einige Lösungsvorschläge.
          Richtig. Nur kann ich in meinem Fall nichts damit anfangen, da ich eine parser für eine spezielle Anwendung baue. Aber danke für den Link. Sind sehr gute Beispiele dabei.

          Kommentar


          • #6
            Spezielle Anwendung?
            Gehen wir doch mal von wordwrap aus. Worin unterscheidet sich die von Dir gewünschte Funktion von wordwrap?

            Kommentar


            • #7
              So habe mich heute in Ruhe nochmal hingesetzt und eine Lösung für mein Problem gefunden. Vielen Dank nochmal für eure Hilfe.

              Code:
              <?php
              
                  function text2image($text) {
                      $maxlinelength = 80;
                      $line = "";
                      $counter = 1;
                      $text2word = explode(" ", $text);
                      foreach($text2word as $key) {
                          for($i = 0; $i < strlen($key); $i++) {
                              if(substr($key, $i, 1) == "<") {
                                  $counter = 0;
                              }
                              if(substr($key, $i, 1) == ">") {
                                  $counter = 1;
                                  $j--;
                              }
                              if($counter == 1) {
                                  $j++;
                              }
                          }
                          $k = $k + $j;
                          if($k <= $maxlinelength - 1) {
                              $output .= $key . " ";
                              $k++;
                          } elseif($k == $maxlinelength) {
                              $output .= $key;
                          } else {
                              $output .= "<br />\n" . $key;
                              $k = $j;
                          }
                          $j = 0;
                      }
                      return $output;
                  }
              
                  print "<div style=\"font: 12px monospace\">";
                  print "&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;15&nbsp;&nbsp;&nbsp;20&nbsp;&nbsp;&nbsp;25&nbsp;&nbsp;&nbsp;30&nbsp;&nbsp;&nbsp;35&nbsp;&nbsp;&nbsp;40&nbsp;&nbsp;&nbsp;45&nbsp;&nbsp;&nbsp;50&nbsp;&nbsp;&nbsp;55&nbsp;&nbsp;&nbsp;60&nbsp;&nbsp;&nbsp;65&nbsp;&nbsp;&nbsp;70&nbsp;&nbsp;&nbsp;75&nbsp;&nbsp;&nbsp;80" . "\n<br />\n";
                  print "....|....|....|....|....|....|....|....|....|....|....|....|....|....|....|....|" . "\n<br />\n";
                  print text2image("Gallia est omnis <a href=\"http://www.heise.de/newsticker/Preistraeger-des-Hochschulwettbewerbs-digital-sparks-stehen-fest--/meldung/105366\">divisa</a> in partes tres, quarum unam incolunt Belgae, aliam Aquitani, tertiam qui ipsorum lingua Celtae, nostra Galli appellantur. Hi omnes lingua, institutis, legibus inter se differunt. Gallos ab Aquitanis Garumna flumen, a Belgis Matrona et Sequana dividit. Horum omnium fortissimi sunt Belgae, propterea quod a cultu atque humanitate provinciae longissime absunt, minimeque ad eos mercatores saepe commeant atque ea quae ad effeminandos animos pertinent important, proximique sunt Germanis, qui trans Rhenum incolunt, quibuscum continenter bellum gerunt. Qua de causa Helvetii quoque reliquos Gallos virtute praecedunt, quod fere cotidianis proeliis cum Germanis contendunt, cum aut suis finibus eos prohibent aut ipsi in eorum finibus bellum gerunt. Eorum una, pars, quam Gallos obtinere dictum est, initium capit a flumine Rhodano, continetur Garumna flumine, Oceano, finibus Belgarum, attingit etiam ab Sequanis et Helvetiis flumen Rhenum, vergit ad septentriones. Belgae ab extremis Galliae finibus oriuntur, pertinent ad inferiorem partem fluminis Rheni, spectant in septentrionem et orientem solem. Aquitania a Garumna flumine ad Pyrenaeos montes et eam partem Oceani quae est ad Hispaniam pertinet; spectat inter occasum solis et septentriones.");
                  print "</div>";
              
              ?>
              EDIT: wordwrap konnte ich nicht nutzen, da diese Funktion die HTML-Tags mitzählt.

              Kommentar


              • #8
                mal nen anderer lösungsansatz.. was ist wenn du einfach die buchstaben zählst, dir die stelle merkst an der immer das letzte leerzeichen war und wenn 80 zeichen voll sind an die stelle zurück gehst und nen umbruch machst?
                Under Construktion

                Kommentar


                • #9
                  Zitat von Hu5eL Beitrag anzeigen
                  mal nen anderer lösungsansatz.. was ist wenn du einfach die buchstaben zählst, dir die stelle merkst an der immer das letzte leerzeichen war und wenn 80 zeichen voll sind an die stelle zurück gehst und nen umbruch machst?
                  Genau das macht ja wordwrap. Das Problem bei deinem Vorschlag (und auch von wordwrap) ist, dass HTML-tags wie z.B. links usw. mitgezählt werden.

                  Kommentar


                  • #10
                    achso sorry wusste ich net
                    Under Construktion

                    Kommentar

                    Lädt...
                    X