Anzahl von Buchstaben automatisch begrenzen

sipoh

Erfahrenes Mitglied
Hallo,

nehmen wir an, jemand postet in dieses Forum ein Wort, wie:

Ahhhhhhhhhhhh.. (h=140). Das ist ärgerlich. Und nehmen wir an, dieser gepostete Text wird durch $text ausgegeben. Gibt es die Möglichkeit, dass man Wörter mit mehr als 100 Bst. automatisch kürzen lässt und durch ein .. kennzeichnet? Hab mich bei php.net durchgeklickt. Sollte wer dort gute Ansätze wissen, bitte bescheid geben.
 
Hi sipoh,

Die Funktion wordwrap() http://www.php.net/manual/de/function.wordwrap.php
könntest du verwenden um den Text zwangsläufig umzubrechen.

Um ein Aaahhhhhhhhhhhhhhhhhhhhhhhhhhh in Aaahh... umzuwandeln hätte ich jetzt
spontan die Idee den String mittels explode() an den Leerzeichen zu zerlegen und
dann die Array Elemente mit strlen() zu überprüfen - ist eins zu lang das entsprechende Element durch substr() abschneiden und "..." anhängen, ersetzen, und dann mit implode() wieder zusammensetzen. Da gibts aber mit regex sicherlich weniger leistungshungrige Möglichkeiten...!

mfg
 
Also, erst mal ermittel wie lang der String ist nech..

PHP:
$Laenge = strlen($String)

Nun noch den String zerlegen

PHP:
$String_new[$Laenge] = str_split($String);

for($i = 0;$i < $Laenge; $i++) {

   //um sicher zu gehen das du auch nicht bereits im Wort oder Satz löschst kannst du diese abfrage auch verlängern!!
   if ($String_Neu[i] == $String_neu[i+1] & $String_Neu[i] == $String_neu[i+2] & $String_Neu[i] == $String_neu[i+3] & $String_Neu[i] == $String_neu[i+4] & $String_Neu[i] == $String_neu[i+5]) {
      $Ausgabe += $String_neu[i];
      break;
   }
   $Ausgabe += $String_neu[i];
}

$Ausgabe += "...";

Damit testet er ob die nächsten fünf Zeichen gleich sind.
Ist zwar nicht gerade ne schöne Variante aber sie funktioniert (theoretisch), habs aber nicht getestet da ich an der Arbeit sitz ;)

Mohag
 
Zuletzt bearbeitet:
ich würde das ganze in ein array pakken und jedes wort einzeln auf die länge prüfen
und anschließend bearbeiten
ungefähr so:

PHP:
$text = "hier steht der text, was auch immer es ist?";

$text_array = explode(" ",  $text); // hier wird jedes wort einzeln in den array gepackt

for ($i=0;$i<sizeof($text_array);$i++) {
if (strlen($text_array[$i] >= 20) {         // wenn ein wort länger als 20 zeich ist wirds verändert
$text_array[$i] = substr(0, 10, $texte_array[$i])."...";    // hier wird nach dem 10 zeichen das wort mit .. beendet du kannst natürlich auch das ganze löschen oder so
}

$text = implode(" ", $text_array); hier wird der text wieder zusammengesetzt

so ich habs nicht getestet sollte aber laufen

mfg Napofis
 
Zuletzt bearbeitet:
moin moin

PHP:
// nur noch max. vier aufeinander folgende Zeichen der selben Art.
$text = preg_replace('~(.)(\1){4,}~', '\1\1\1\1', $text);
Somit wird aus z.b. haaaaaaaaaaaaaaaaaaaaaaallo nur noch ein haaaallo und aus deinem Lottogewinn von 1000000000 Euro, würden 10000 Euro :rolleyes:
 
Zurück