AllesMeins: Längstes Wort in einem String

Hallo,

ich bastele gerade an einer Funktion, mit der Benutzer Text auf eine Homepage schreiben können. Nun möchte ich gerne die Scherzkekse ausbremsen die Worte wie "NNNNNNNNNNNNNEEEEEEEEEEEEEEEEIIIIIIIIIIIINNNNN" schreiben und damit mal gerne das Design durcheinander bringen oder aber zumindest mal die betreffende Inhalts-Box sprengen.

Meine erste Idee war mit word_wrap() zu arbeiten, doch das hat sich als nicht wirklich hilfreich herausgestellt, da man dort eine Zeichenanzahl wählen müsste, die in etwa die Hälfte der maximalen Breite ausmacht um Worte wie "WWWWWWWWWWWW" auch in die richtige Breite zu zwingen (da die Buchstaben bei der von mir verwendeten Schriftart unterschiedlich breit sind).

Also war meine nächste Idee einfach Wörter mit einer gewissen Länge zu zerlegen oder zu verbieten. Das kann zwar in Einzelfällen auch zu unschönen Situationen fühlen, erscheint mir aber doch das praktischste zu sein.
Nun die Frage: Wie kann ich das realisieren? Oder kennt jemand noch eine bessere Lösung für mein problem?

Grüße

  1. Hi,
    jetzt auf die schnelle würde ich es so machen:

    // text in array zerlegen anhand leerzeichen
    $ar = (' ',$txt);

    // dann jeden wert im array abschneiden der länger ist
    // oder die komplette Eingabe dann verweigern.

    foreach($ar as $wort)
    {
    if(strlen($wort)>150){die('DEIN WORT : $wort IST SELTSAM LANG');}
    }

    Nur auf die schnelle geht bestimmt noch besser.

    stefan

    1. Korrektur kleiner Flüchtigkeitsfehler:

      $ar = explode(' ',$txt);

      foreach($ar as $wort)
      {
      if(strlen($wort)>150){die("DEIN WORT : $wort IST SELTSAM LANG");}
      }

    2. gudn tach!

      // text in array zerlegen anhand leerzeichen
      $ar = (' ',$txt);

      da fehlt noch das "split".

      wenn die laenge nicht das einzige kriterium ist, sondern bei nicht ganz so langen worten darauf geachtet werden soll, dass sie mehrere mehrfache gleiche majuskeln hintereinander enthalten, dann kann man das z.b. mit /([A-ZÜÖÄ])\1{2,}([A-ZÜÖÄ])\2{2,}([A-ZÜÖÄ])\3{2,}/ (via preg_match) abfangen.
      je nach locale sollte man auch [A-ZÜÖÄ] durch [[:upper:]] ersetzen koennen.

      einen menschlichen kontroll-leser wird man mit sowas jedoch nicht ersetzen koennen. und die wahrscheinlichkeit unschuldige zu nerven ist auch immer gegeben. im deutschen kann man sehr lange worte konstruieren und... ahhh, es faengt an zu gewittern, ich muss meinen computer ausschalten...

      prost
      seth

      1. gudn tach!

        // text in array zerlegen anhand leerzeichen
        $ar = (' ',$txt);

        da fehlt noch das "split".

        1. habe ich anscheinend mehr als 8 minuten gebraucht, um das zu schreiben...
        2. dachte ich, "split" waere in php ein alias von "explode". so ist es nicht. "split" ist in php einfach eine zu vermeidende funktion. bei splits, die nach regulaeren ausdruecken schreien, sollte man statt "split" "preg_split" einsetzen. hier genuegt jedoch "explode" vollkommen und ist auch das schnellste...

  2. Hi,

    Also war meine nächste Idee einfach Wörter mit einer gewissen Länge zu zerlegen oder zu verbieten. Das kann zwar in Einzelfällen auch zu unschönen Situationen fühlen, erscheint mir aber doch das praktischste zu sein.

    Das ist eine von zwei Möglichkeiten. Bei beliebigen Worten wirst Du es aber nicht schaffen, eine sinnvolle Trennstelle zu finden. Ich würde dann einfach die Mitte nehmen oder bei noch längeren Worten dritteln, vierteln usw.

    Die zweite Möglichkeit wäre, nicht zu trennen, sondern jeden Bereich (Absatz, Nachricht, was auch immer) mit einer gewünschten (Maximal-)Breite und overflow:auto zu versehen.

    freundliche Grüße
    Ingo