Navigation
 Startseite
 Fachbücher
 Anzeigenmarkt
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Webhoster Vergleich
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Script Mods
 phpBB Adsense Mode

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 Markdown to HTML
 Colorpicker
 Unix timestamp Tool
 TLD Liste
 Webkatalog‑Verzeichnis

Partner
 Sprüche Treff

Artfiles.de
Bietet Serviceorientierte...
https://www.Artfiles.de
Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains...
https://www.Hosterplus.de
 
 
 

String kürzen ohne Wörter abzuschneiden

Sie befinden sich: Home > Php Tutorial > String kürzen ohne Wörter...

String kürzen ohne Wörter abzuschneiden


Eintrag am:  24.01.2010
Hits / Besucher:  9682
Sprache:  Deutsch
Kategorie:  Einsteiger Tutorials
Tutorial Art:  eigenes
Eingetragen von   schubertmedia schubertmedia
 
Beschreibung

Wer Textvorschauen oder Teaser für Blogartikel erstellt, steht vor einem häufigen Problem: Der Text soll nach einer bestimmten Zeichenzahl gekürzt werden, aber nicht mitten im Wort abbrechen. PHP bietet dafür sowohl eine eingebaute Funktion als auch einfache Möglichkeiten, das selbst umzusetzen.

Die schnelle Lösung: mb_strimwidth()

Seit PHP 4.0.6 gibt es mb_strimwidth(), die einen String auf eine bestimmte Breite kürzt und automatisch einen Anhang wie ... anfügt. Die Funktion ist Multibyte-sicher und funktioniert damit auch korrekt mit Umlauten:

<?php

$text = 'Das ist ein langer Beispieltext für eine Vorschau.';

echo mb_strimwidth($text, 0, 30, '...');
/* Ausgabe: Das ist ein langer Beispie... */
?>

Die Funktion schneidet exakt nach der angegebenen Breite ab. Allerdings trennt sie dabei auch mitten in einem Wort. Für viele Fälle reicht das aus, weil die drei Punkte den Schnitt kaschieren. Wenn der Text aber sauber an einer Wortgrenze enden soll, braucht es eine eigene Lösung.

Text an der Wortgrenze kürzen

Die Idee ist einfach: Zuerst wird der Text mit mb_substr() auf die gewünschte Länge gekürzt. Dann wird mit mb_strrpos() das letzte Leerzeichen im gekürzten Text gesucht und alles danach entfernt.

<?php

function textKuerzen(string $text, int $maxLaenge = 150, string $suffix = '...'): string
{
if (mb_strlen($text) <= $maxLaenge) {
return $text;
}

$gekuerzt = mb_substr($text, 0, $maxLaenge);

/* Letztes Leerzeichen im gekuerzten Text finden */
$letztePosition = mb_strrpos($gekuerzt, ' ');

if ($letztePosition !== false) {
$gekuerzt = mb_substr($gekuerzt, 0, $letztePosition);
}

return $gekuerzt . $suffix;
}
?>

Die Funktion nutzt durchgehend die mb_*-Varianten der String-Funktionen. Dadurch werden Umlaute und andere Sonderzeichen korrekt gezählt und nicht beschädigt.

Beispiel: Die Funktion verwenden

So sieht der Einsatz in der Praxis aus:

<?php

$text = 'PHP bietet viele praktische Funktionen für die Textverarbeitung.';

echo textKuerzen($text, 40);
/* Ausgabe: PHP bietet viele praktische... */

echo textKuerzen($text, 20);
/* Ausgabe: PHP bietet viele... */

echo textKuerzen($text, 200);
/* Ausgabe bleibt unveraendert, da der Text kuerzer als 200 Zeichen ist */
?>

Im ersten Aufruf wird der Text nach 40 Zeichen gekürzt. Da das 40. Zeichen mitten im Wort „Funktionen“ liegt, springt die Funktion zum vorherigen Leerzeichen zurück. Im letzten Aufruf ist der Text kürzer als das Limit und wird daher unverändert zurückgegeben.

Praxistipp: HTML vorher entfernen

Wenn der Text HTML-Tags enthält, zum Beispiel aus einem CMS oder einer Datenbank, sollte man diese vor dem Kürzen mit strip_tags() entfernen. Sonst werden HTML-Tags mitgezählt oder mitten im Tag abgeschnitten:

<?php

$html = '<p><strong>PHP</strong> ist eine serverseitige Programmiersprache.</p>';

$klartext = strip_tags($html);
echo textKuerzen($klartext, 30);
/* Ausgabe: PHP ist eine serverseitige... */
?>

Durch strip_tags() wird der reine Text ohne HTML-Markup extrahiert. Erst danach greift die Kürzung zuverlässig an den Wortgrenzen.

 

Tags:

 

Bücherregal mit drei Büchern: 'PHP 4 - Grundlagen und Profiwissen' von Hanser Verlag, 'Webdesign in a Nutshell' von O'Reilly Verlag, und 'Webgestaltung' von Galileo Computing.