Webtip: Tekst inkorten met PHP

Webtip: Tekst inkorten met PHP

Het is weer zondag, dus tijd voor een nieuwe webtip. Vorige week gingen we aan de slag met het effectiever schrijven van CSS. Vandaag gaan we kijken hoe je tekst of zinnen kunt inkorten met PHP.

In sommige gevallen wil je namelijk niet dat een heel stuk tekst weergegeven wordt op je website, maar alleen een gedeelte daarvan, bijvoorbeeld aan de hand van een vooraf opgegeven aantal karakters.

We gaan kijken hoe we dit kunnen doen met PHP. Enige basiskennis van PHP is wel vereist voor deze webtip.

We beginnen met de functie die de tekst zal verwerken tot het gewenste resultaat. De tekst wordt verwerkt aan de hand van een vooraf opgegeven aantal karakters dat weergegeven mag worden.

function short_txt($string, $length) {

  // We kijken eerst of het aantal karakters van de tekst groter is dan het gewenst aantal      karakters dat uiteindelijk moet worden weergegeven
  if(strlen($string) > $length) {

     // Zo ja, dan korten we de tekst in met de functie substr()
     $output = substr($string, 0, $length).'..';

  } else {

     // Zo niet, dan korten we niets in, en blijft het originele stukje tekst bestaan.
     $output = $string;
  }
  
  return $output;
}

Dit is de simpelste functie voor het inkorten van je teksten of zinnen. We kijken met de PHP functie 'strln()' eerst hoeveel karakters het stukje tekst bevat. Is deze groter dan het aantal karakters dat je eigenlijk wilt laten zien op je website, dan korten we de tekst in met 'substr()' en plakken we er twee puntjes achter.

De functie is nu als volgt te gebruiken:

$tekst = 'Dit is de tekst die zal worden ingekort';
echo short_txt($tekst, 12);

// Zal laten zien: "Dit is de te.."

Zoals je ziet wordt de tekst nu precies afgebroken na de 12 karakters. Het probleem is echter dat je maar halve woorden krijgt op de plek waar de tekst wordt afgebroken. Wil je dit niet, dan kun het volgende gebruiken.

if(strlen($string) > $length) { 
  $output = substr($string, 0, $length);

  // We kijken nu op welke positie de laatste spatie zich bevindt en breken het daar af
  $output = substr($output, 0, strrpos($output, ' ')).'..'; 
}

Zoals je ziet hebben we een regel toegevoegd. Deze regel zoekt met 'strrpos()' naar de positie van de laatste spatie in de (al zoals de eerste functie verwerkte) tekst en breekt het daar af. Gebruiken we de functie exact op dezelfde manier als de eerste keer, dan krijgen we het volgende.

$tekst = 'Dit is de tekst die zal worden ingekort';
echo short_txt($tekst, 12);

// Zal laten zien: "Dit is de.."

Tot slot gaan we kijken naar tekst waar HTML in voorkomt. De HTML codes willen we natuurlijk niet laten meetellen wat betreft het aantal karakters. De codes zelf zijn namelijk niet zichtbaar op je website en hebben dus geen invloed op de lengte van je tekst.

Hiervoor kunnen we gebruik maken van 'strip_tags()', die alle HTML codes uit de tekst filtert. Over deze gefilterde tekst kunnen we nu het aantal karakters opnieuw berekenen.

if(strlen(strip_tags($string)) > $length) {

De gehele functie ziet er nu als volgt uit:

function short_txt($string, $length) {

  // We kijken eerst of het aantal karakters van de tekst groter is dan het gewenst aantal karakters dat uiteindelijk moet worden weergegeven
  if(strlen(strip_tags($string)) > $length) {

     // Zo ja, dan korten we de tekst in met de functie substr()
     $output = substr($string, 0, $length);

     // We kijken nu op welke positie de laatste spatie zich bevindt en breken het daar af
     $output = substr($output, 0, strrpos($output, ' ')).'..'; 
  } else {

     // Zo niet, dan korten we niets in, en blijft het originele stukje tekst bestaan.
     $output = $string;
  }
  
  return $output;
}

$tekst = 'Dit is de tekst die zal worden ingekort';
echo short_txt($tekst, 12);

// Zal laten zien: "Dit is de.."

Reacties (2)