[PHP] W jaki sposób skrócić długość tekstu tak jak jest to robione w newsach ?

przez | 7 listopada, 2013

Często napotykanym problemem jest konieczność skrócenia tekstu tak jak to jest robione chociażby w news-ach czy też sklepach internetowych, gdzie przy produktach znajdujemy jego krótki opis.

Zaczynamy od sprawdzenia czy tekst wymaga w ogóle skrócenia, do tego celu posłużymy się funkcją mb_strlen (można także użyć strlen, jednak w przypadku, gdy w treści będą występowały polskie znaki możemy nie dostać prawidłowego wyliczenia długości ciągu znaków).

$tekst = ''; // tekst do skrócenia
$max = 100;  // maksymalna ilość znaków

if ( mb_strlen($tekst) > $max ) 
{
    //skracamy tekst
}
else 
{
    return $tekst;
}

Gdy już wiemy że dany tekst wymaga skrócenia to dokonujemy skrócenia wykorzystując funkcję mb_substr (lub substr).


$tekst = ''; // tekst do skrócenia
$max = 100;  // maksymalna ilość znaków

if ( mb_strlen($tekst) > $max ) 
{
    return mb_substr($tekst, 0, $max);
}
else 
{
    return $tekst;
}

Jednak tak przeprowadzona operacja naraża nas na ryzyko przycięcia wyrazu, aby uniknąć tego typu problemów wykonujemy kolejną operację na tekście. Operacja ta polega na znalezieniu ostatniej spacji od prawej strony tekstu za pomocą funkcji strrpos i przycięcie go do tej pozycji dzięki czemu nie zobaczymy urwanego słowa.


$tekst = ''; // tekst do skrócenia
$max = 100;  // maksymalna ilość znaków

if ( mb_strlen($tekst) > $max ) 
{
    $tekst = mb_substr($tekst, 0, $max);
    $pozycjaSpacji = strrpos($tekst, " ");

    return mb_substr($tekst, 0, $pozycjaSpacji);
}
else 
{
    return $tekst;
}

Mamy już wszystkie niezbędne elementy teraz możemy opakować nasz kod w funkcję i zacząć wykorzystywać w projektach 😉

function cutText($tekst, $max) 
{
    //sprawdza cz tekst jest dłuższy niż określone maksimum
    if ( mb_strlen($tekst) > $max ) 
    {
        $tekst = mb_substr($tekst, 0, $max);
        $pozycjaSpacji = strrpos($tekst, " ");

        return mb_substr($tekst, 0, $pozycjaSpacji);
    }
    else 
    {
        return $tekst;
    }
}

$tekst = 'Lorem ipsum dolor sit amet, 
consectetur adipiscing elit. Phasellus 
varius ultricies risus, non lobortis neque 
ornare at.';

echo cutText($tekst, 20);

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *