Szöveg rövidítése helyesen

A lenti kódrészlet nem tesz egyebet, minthogy levágja a szövegünket a paramétertől kapott hosszúságra. Ez még önmagába nem nagy dolog, hisz a substr PHP függvény egyszerűen megoldja a feladatot. A függvény annyiban különbözik, hogy ez az utolsó szónál vágja le szövegünket. Ez rövid leírásoknál, címeknél hasznos lehet.

function trim_text($input, $length, $ellipses = true, $strip_html = true) {
    //ha ha paraméternek van értéke kiveszi a HTML elemeket
    if ($strip_html) {
        $input = strip_tags($input);
    }
    //csak akkor vágjuk le ha hosszabb mind amit mi szeretnénk
    if (strlen($input) <= $length) {
        return $input;
    }
    //megkeressük az utolsó space -t
    $last_space = strrpos(substr($input, 0, $length), ' ');
    $trimmed_text = substr($input, 0, $last_space);
    //betesszük a levágást jelző karaktereket
    if ($ellipses) {
        $trimmed_text .= ' ...';
    }
    //a levágott szöveg
    return $trimmed_text;
}

Példakód letöltése itt ( trim_text.zip )


További jó kódolást!

6 HOZZÁSZÓLÁS

  1. Nem rossz, de mért jó az, ha kiveszed a html tag -eket? Hisz akkor elveszik a formázás… Ha amúgy is formázott a szövegem, akkor nem fogom ezt használni a formázás miatt.
    Egyébként jó.

    Talán annyi lehetne rugalmasítani (nem tudom van-e ilyen szó :P), hogy a $ellipses default értéke “” (üres string), és akkor paraméterként meg lehet adni levágást jelző karaktereket, és egy if -el kevesebb.

    Zogmund

  2. A formazas leszedese az opcionalis. Sokszor pl mikor cimeket akarunk kiiratni, vegul is csak a szoveget akarjuk levagni a formazas alltalaban utolag kerul ra. Ennek ellenere $strip_html false -ra allitva kiutjuk ezt a lehetoseget.

    A masodik megjegyzesedben teljesen igazat adok neked. Nekem “…” kellett s ezt hagytam, de siman ha ures stringre allitanam default akkor jobb lenne, hisz ha van erteke !empty akkor az ellipses erteket ragasztanam a szoveg vegre.

    Koszi a hozzaszolast mindenkeppen jo otlet volt ez az ellipses -es dolog.

  3. Az $ellipses -es modositast valahogy igy kepzelnem el:

    if ($ellipses) {
            $trimmed_text .= ' ...';
        }

    helyett

    if (!empty($ellipses)) {
            $trimmed_text .= $ellipses;
        }

    Meg azzal egeszitenem ki, hogy a levagast jelzo karakterek csak akkor legyenek benne, ha a szoveg tenylegesen hoszabb mind a $lenght.

  4. gomby: szerintem nem kell az if, hisz ha az $ellipses úgy is empty, akkor a konkatenáció nem fűz hozzá semmit! Ezért is mondtam, hogy így nem kell az az if.

    Szerintem ;)

HOZZÁSZÓLOK A CIKKHEZ

Kérjük, írja be véleményét!
írja be ide nevét