Ankündigung

Einklappen
Keine Ankündigung bisher.

Wortlänge begrenzen

Einklappen

Neue Werbung 2019

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

  • Wortlänge begrenzen

    hey
    Ich möchte einen String nach Wörtern mit über sagen wir mal 50 Zeichen durchsuchen und diese überlangen Wörter, dann mit einem Leerzeichen in zwei kürzere Wörter verwandeln. Mit anderen Worten: Ich möchte allen zu langen Wörtern nach so-und-so-viel Zeichen ein Leerzeichen reinkloppen.
    Meine "Lösungsansätze":
    Erste Idee: wordwrap - bringt gar nix, weil ALLES nach 50 Zeichen getrennt würde, auch viele kurze Wörter.
    Zweite Idee: mit RegEx lange Wörter suchen (preg_replace('/\S{20,}/', '', $test)) - beseitigt die langen Wörter, statt sie zu trennen.

    Wie lässt sich das am intelligentesten lösen, möglichst ohne Seitenweise Code?

    Schonmal vielen Dank im Vorraus für die sicherlich zahlreich folgenden Denkanstöße!
    lg & Frohe Ostern!
    Tim-

  • #2
    preg_replace ist gar nicht schlecht. Allerdings musst du es ein bisschen anders anwenden:
    PHP-Code:
    // Leerzeichen in Wörter mit mehr als 40 Zeichen
    preg_replace('/(\S{20})(\S{20,})/''$1 $2'$test
    Dies würde ein Wort mit unecht größer 40 Buchstaben nach 20 Buchstaben mit einem Leerzeichen versehen.
    [IMG]http://media.ubuntuusers.de/portal/files/ubuntu.png[/IMG][IMG]http://sqlmanager.net/i/ico/mysql.gif[/IMG][SIGPIC][/SIGPIC]

    Kommentar


    • #3
      Hey
      erstmal vielen Dank!
      Das Problem ist aber noch, dass Wörter mit über 40 zeichen nur einmal getrennt werden.

      xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxx
      wird zu
      xxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      statt
      xxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxx

      lg

      Edit: Das Leerzeichen in der ersten Teile hat das Forum automatisch gemacht..

      Kommentar


      • #4
        Wenn du die Wörter mehrmals trennen willst, wirst du nicht um eine eigene Funktion herum kommen.
        Habe auf die Schnelle mal folgendes gebastelt:
        PHP-Code:
         <?php
            
        function split_word($word$maxlength) {
                
        $actions = (strlen($word)+($maxlength-strlen($word)%$maxlength)) / $maxlength 1;
                
        $new_word substr($word0$maxlength);
                for (
        $i 0$i $actions$i++) {
                    
        $new_word .= " ".substr($word, ($i+1) * $maxlength$maxlength);
                }
                return 
        $new_word;
            }

            
        $word "abcdefghijklmnopqrstuvwxyz";
            echo 
        preg_replace("/(\S{21,})/e""split_word('$1', 20)"$word);
            
         
        ?>
        Dies trennt alle Wörter mit mehr als 20 Zeichen so oft nach 20 Zeichen, dass jeder Teil höchstens 20 Zeichen lang ist.
        [IMG]http://media.ubuntuusers.de/portal/files/ubuntu.png[/IMG][IMG]http://sqlmanager.net/i/ico/mysql.gif[/IMG][SIGPIC][/SIGPIC]

        Kommentar


        • #5
          Versuch es mal so:
          $text = wordwrap($text, 20, " ", true);
          Dies sollte bereits getrennte wörter nicht trennen.
          webmasterlounge
          Die deutsche Webmaster-Community

          Kommentar


          • #6
            Warum nicht einfach:
            PHP-Code:
            preg_replace('/\S{20}(?=\S{2})/''$0 '$string); 
            Wobei man mit dem Look-Ahead noch angeben kann, wie viele Zeichen einem Trennzeichen noch folgen können, um einzeln abgetrennten Zeichen vorzubeugen.

            Mit oben gezeigtem Ausdruck geht also auch ein 21 Zeichen langer String durch. Ein 22 Zeichen langer, wird jedoch geteilt in 20 + 2 Zeichen...

            Kommentar


            • #7
              Zitat von DJ_RhoxxZ Beitrag anzeigen
              Versuch es mal so:
              $text = wordwrap($text, 20, " ", true);
              Dies sollte bereits getrennte wörter nicht trennen.
              Ich denke auch dass das die beste Lösung sein wird
              Grüße
              "Dummheit redet viel..Klugheit denkt und schweigt.." [Amgervinus]

              Kommentar


              • #8
                wordwrap() ist die Lösung. Danke!

                Allerdings weis ich immernoch nich wie das sein kann. Die Beispiele zu wordwrap() auf php.net lassen darauf schließen, dass Wordwrap für den gesammten String nach einer bestimmten Anzahl von Zeichen das Angegebene einfügt - nicht wie sich rausgestellt hat für jedes Wort einzeln. Verstehe ich da was falsch?

                lg

                Kommentar


                • #9
                  Ja stimmt schon.
                  =>
                  PHP: explode - Manual
                  PHP: wordwrap - Manual
                  PHP: foreach - Manual
                  PHP: array_map - Manual
                  PHP: Functions - Manual

                  Grüße
                  Destruction
                  "Dummheit redet viel..Klugheit denkt und schweigt.." [Amgervinus]

                  Kommentar


                  • #10
                    nicht wie sich rausgestellt hat für jedes Wort einzeln.
                    If the cut is set to TRUE, the string is always wrapped at or before the specified width. So if you have a word that is larger than the given width, it is broken apart. (See second example).
                    Ich finde das und das Beispiel recht eindeutig.
                    [COLOR="#F5F5FF"]--[/COLOR]
                    [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                    [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                    [COLOR="#F5F5FF"]
                    --[/COLOR]

                    Kommentar

                    Lädt...
                    X