Variableninhalt kürzen

Sasser

Erfahrenes Mitglied
Hallo!

Wie ist es möglich eine $Variable bis z.B. auf 200 Zeichen zu kürzen und dann ... dahinter zu machen?
 
Die Variante aus dem verlinkten Thread, bei welchem sich die Funktion so lange aufruft bis ein Leerzeichen auftaucht, finde icht nicht wirklich toll.

Dieser Dreizeiler sollte es eben so tun.
PHP:
$text = 'ich bin ein langer text....';
$strlen = 200;
if ( strlen( $text ) > $strlen ) {
        $text = substr( ' ', strrpos( substr( $text, 0, $strlen ) ) ).'...';
}

Um zuverstehen was in der Zeile geschieht, muss man sie von innen nach aussen lesen.

Das innere substr() übergibt an strrpos() die ersten 200 Zeichen von $text. strrpos() ermittelt nun das letzte Leerzeichen innerhalb dieser 200 Zeichen und gibt die Position an das äüßere substr() zurück. An dieser Stelle wird der String dann abgeschnitten und '...' angehanden. Fertig. ;)

Im Gegensatz zu der verlinkten Funktion sucht diese nicht das nächste Leerzeichen, sondern das vorher gehende. Ich finde das praktischer, da man die Ausgabe leichter Einschätzen kann und man nicht mit eventuell zu langen Texten rechnen muss, welche das Layout der Seite zerstören könnten.
 
Hi,

das meintest Du aber sicherlich so, oder?

PHP:
$text = substr( $text, 0, strrpos( substr( $text, 0, $strlen ) , ' ') ).'...';

Ansonsten würde ich das einer rekursiven Funktion :eek:, wie in dem verlinkten Thread, eindeutig vorziehen. ;)

LG
 
Die Variante aus dem verlinkten Thread, bei welchem sich die Funktion so lange aufruft bis ein Leerzeichen auftaucht, finde icht nicht wirklich toll.

Dieser Dreizeiler sollte es eben so tun.
PHP:
$text = 'ich bin ein langer text....';
$strlen = 200;
if ( strlen( $text ) > $strlen ) {
        $text = substr( ' ', strrpos( substr( $text, 0, $strlen ) ) ).'...';
}

Um zuverstehen was in der Zeile geschieht, muss man sie von innen nach aussen lesen.

Das innere substr() übergibt an strrpos() die ersten 200 Zeichen von $text. strrpos() ermittelt nun das letzte Leerzeichen innerhalb dieser 200 Zeichen und gibt die Position an das äüßere substr() zurück. An dieser Stelle wird der String dann abgeschnitten und '...' angehanden. Fertig. ;)

Im Gegensatz zu der verlinkten Funktion sucht diese nicht das nächste Leerzeichen, sondern das vorher gehende. Ich finde das praktischer, da man die Ausgabe leichter Einschätzen kann und man nicht mit eventuell zu langen Texten rechnen muss, welche das Layout der Seite zerstören könnten.

Dem würde ich nich zustimmen, denn die Funktion im verlinkten Theard ist besser auch weil, dadurch der Zusammenhang in der Verständniss Frage der leser nicht beeinträchtigt wird, was es wohl wird, wenn deine Funktion nach dem Buchstaben E... macht, wobei evtl dadurch der "zusammenhang" kapputt gemacht wird, der zum weiterlesen imponiert.
 
Hi,

Dem würde ich nich zustimmen, denn die Funktion im verlinkten Theard ist besser auch weil, dadurch der Zusammenhang in der Verständniss Frage der leser nicht beeinträchtigt wird, was es wohl wird, wenn deine Funktion nach dem Buchstaben E... macht, wobei evtl dadurch der "zusammenhang" kapputt gemacht wird, der zum weiterlesen imponiert.

Wieso? Seine Funktion trennt doch auch nach einem Leerzeichen ab, halt nur nach dem letzten Leerzeichen innerhalb der maximalen Länge und nicht nach dem nächsten Leerzeichen nach Erreichen der maximalen Länge.
Außerdem kann man letzteres auch, falls gewünscht, mit strpos und substr ohne rekursive Funktion erreichen.

LG
 
Zurück