toscho.design

PHP-Funktion end_on_word()

Noch ein Schnipsel aus meiner Kramkiste. Ich benutze diese Funktion beispielsweise auf der Startseite zum Anreißen der letzten Kommentare. Sie verhindert abgerissene Worte am Ende. Hilfreich, wenn man unbekannten Text aus einer Datenbank holt. Ich will meine Kommentatoren schließlich nicht mit entstellten Zitaten beleidigen.
Der »Trick« besteht darin, daß ich einfach das letzte Wort entferne.

/**
 * Entfernt unvollständige Worte am Ende eines Strings.
 * @author Thomas Scholz <http://toscho.de>
 * @param $str Zeichenkette
 * @return string
 */
function end_on_word($str)
{
    // Jedes Wort ein Eintrag im Array …
    $arr   = explode(' ', trim($str) );
    // … letztes Stück wegwerfen …
    array_pop($arr);
    // … den String wieder herstellen und Kommas trimmen.
    return rtrim( implode(' ', $arr), ',;');
}

Beispiel: Die Datenbank liefert den String »Wie du weißt, explodi« aus, und wir wollen die Ausgabe aufhübschen:

echo end_on_word('Wie du weißt, explodi') . '';

Dann kommt das heraus:

Wie du weißt …

Das ist doch viel … schöner, oder?

4 Kommentare

  1. Wolfgang Wagner am 09.04.2009 · 22:59

    Cool, ein netter kleiner Codeschnipsel, danke, das werde ich mir merken.

    Gruß
    Wolfgang

  2. _asterix_ am 14.04.2009 · 21:39

    Die Idee(oder der "Trick") ist ja eigentlich ganz einfach - aber trotzdem sehr hilfreich. Ich werde vielleicht so etwas ähnliches bei mir auf artool (meiem online Pinboard) umsetzen. Dort ist das nämlich noch ziemlich unschön.

    Grüsse aus der Schweiz,
    [asterix]

  3. Dennis Becker am 27.04.2009 · 14:18

    Will ja nicht meckern, aber wordwrap() wäre doch viel einfacher zu handhaben!

    PS: beim tippen verschwindet in der Vorschau das Bild und wenn man aufhört ist es wieder da, ziemlich nervig für's Auge beim tippen.

  4. Thomas Scholz am 27.04.2009 · 14:35

    @Dennis Becker: Ja, stimmt, man kann auch wordwrap() anwenden und die erste Zeile extrahieren. Allerdings kostet das ungefähr genauso viel Code, und wordwrap() hat manchmal Probleme mit Multibyte-Zeichen, die im schlimmsten Fall in der Mitte getrennt werden. Deshalb habe ich mich für einen Weg entschieden, bei dem ich die »Wortgrenze« definiere.

    Das Problem des flackernden Vorschaubildes behebe ich heute abend noch habe ich erstmal durch Abschalten der Gravatare in der Vorschau behoben, danke fürs Nachhaken.