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

  • tim-peters
    hat ein Thema erstellt Wortlänge begrenzen.

    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-

  • nikosch
    antwortet
    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.

    Einen Kommentar schreiben:


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

    Grüße
    Destruction

    Einen Kommentar schreiben:


  • tim-peters
    antwortet
    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

    Einen Kommentar schreiben:


  • Destruction
    antwortet
    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

    Einen Kommentar schreiben:


  • soul-mole
    antwortet
    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...

    Einen Kommentar schreiben:


  • DJ_RhoxxZ
    antwortet
    Versuch es mal so:
    $text = wordwrap($text, 20, " ", true);
    Dies sollte bereits getrennte wörter nicht trennen.

    Einen Kommentar schreiben:


  • Frank
    antwortet
    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.

    Einen Kommentar schreiben:


  • tim-peters
    antwortet
    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..

    Einen Kommentar schreiben:


  • Frank
    antwortet
    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.

    Einen Kommentar schreiben:

Lädt...
X