Strings kürzen
in PHP · Autor: Sebastian Fuchs
In diesem Tutorial wird die Funktion substr() eingeführt, mit der es möglich ist, Strings zu kürzen. Das kann zum Beispiel bei MySQL Ausgaben nützlich sein, um Texte nach einer bestimmten Anzahl an Zeichen zu kürzen. Als Anwendungsbeispiel wird das englische MySQL Datum in das deutsche Format umgewandelt.Kommen wir zunächst zu der Funktion.
<?php
substr($String, $Start, $Laenge);
?>
Innerhalb der Klammer werden insgesamt drei Angaben gemacht. Die erste ist der zu bearbeitende String. Das wäre bei einer Text-Ausgabe dann der zu kürzende Text.substr($String, $Start, $Laenge);
?>
Als nächstes wird angegeben, bei welchem Zeichen mit dem Auslesen des Strings begonnen werden soll. Das erste Zeichen ist "0". Wäre der String "abcd" ist "0" also "a" und "c" wäre "2". Wenn also der Text vom ersten Zeichen an eingelesen werden soll, wird als Startzeichen "0" angegeben.
Die letzte Angabe steht für die Länge der Abfrage, also wie viele Zeichen abgerufen werden sollen. Bei Texten könnte man beispielsweise eine Zeichenanzahl von "100" benutzen. Fangen wir mit einem einfachen Beispiel an:
<?php
echo substr('abcdefghi', 3, 4);
?>
Als Ausgabe wird "defg" angezeigt.echo substr('abcdefghi', 3, 4);
?>
Kommen wir nun zum dem Anwendungsbeispiel. Wenn man in eine MySQL-Tabelle das Datum in englischem Format einträgt, sieht das ganze so aus: YYYY-MM-DD HH:MM:SS. Beispiel: 2006-10-22 18:54:20.
Mithilfe von substr() lässt sich dieses Datum mit Zeit relativ leicht in das deutsche Format, hier 22.10.2006 18:54:20 umwandeln. Die Zeit brauchen wir ja gar nicht umwandeln, deshalb nehmen wir uns nur das Datum vor.
Als erstes kommt der Tag:
<?php
$datum = '2006-10-22 18:54:20';
echo substr($datum, 8, 2).'.'
?>
Hier die Erklärung: Im MySQL Datum steht der Tag an 9. Stelle. Da bei "0" mit Zählen begonnen wird, beginnen wir mit dem Abruf also bei "8". Da der Tag nur aus zwei Zeichen besteht, kommt als Längenangabe logischerweise eine "2". Anschließend folgt der . um die substr()-Ausgabe zu verbinden. Weiter geht es mit dem Monat.$datum = '2006-10-22 18:54:20';
echo substr($datum, 8, 2).'.'
?>
<?php
.substr($datum, 5, 2).'.'
?>
Ähnlich wie bei dem Tag werden wieder 2 Zeichen abgerufen, nur diesmal an 6. Stelle (also als Angabe "5"), denn dort steht das Datum. Dahinter kommen wieder die entsprechenden Zeichen um alles miteinander zu verbinden..substr($datum, 5, 2).'.'
?>
Kommen wir nun zum Jahr.
<?php
.substr($datum, 0, 4).' '
?>
Diesmal beginnen wir mit der 1. Ziffer (deshalb "0") und lesen vier Zeichen aus, da eine Jahreszahl ja bekanntlich aus vier Ziffern besteht. Anschließend wieder das Verbindungszeichen aber diesmal anstatt einem Punkt ein Leerzeichen, da ja noch die Zeitangabe folgen soll..substr($datum, 0, 4).' '
?>
Als letztes nochmal alles zusammen inklusive angehangener Zeit.
<?php
$datum = '2006-10-22 18:54:20';
echo substr($datum, 8, 2).'.'.substr($datum, 5, 2).'.'.substr($datum, 0, 4).' '.substr($datum, 10, 8);
?>
Wie man sieht wurde am Ende noch die Zeit angehangen. Da diese mit dem 11. Zeichen beginnt (also als Angabe "10") wird dort mit dem Auslesen begonnen. Je nachdem ob du auch die Sekundenangabe haben möchtest kannst du "5" (ohne Sekunden) oder "8" (mit Sekunden) benutzen.$datum = '2006-10-22 18:54:20';
echo substr($datum, 8, 2).'.'.substr($datum, 5, 2).'.'.substr($datum, 0, 4).' '.substr($datum, 10, 8);
?>
Wenn alles klappt müsste dann: 22.10.2006 18:54 bzw. 22.10.2006 18:54:20 ausgegeben werden.
Als letztes noch einen kleinen Codeschnipsel für die Zeichenbeschränkung bei Text-Ausgaben. Dazu nehmen wir noch die Funktion strlen() hinzu, welche die Länge eines Strings zurückliefert.
<?php
$text = // zu kürzender Text
$maximale_laenge = 100;
if(strlen($text) > $maximale_laenge)
{
$text = substr($text, 0 , $maximale_laenge).'...';
}
echo $text;
?>
Hier die Erklärung: Als erstes wird eine maximale Anzahl an Zeichen definiert, die der Text besitzen darf.$text = // zu kürzender Text
$maximale_laenge = 100;
if(strlen($text) > $maximale_laenge)
{
$text = substr($text, 0 , $maximale_laenge).'...';
}
echo $text;
?>
Danach wird mithilfe von strlen() überprüft, ob der String die maximale Anzahl an Zeichen überschreitet.
Ist das der Fall, wird der String nach dem 101. Zeichen abgebrochen und "..." angehangen, damit man die Kürzung erkennt.
Falls der String die maximale Anzahl an Zeichen nicht überschreitet, bleibt er unverändert.
Am Schluss erfolgt dann eine einfache Ausgabe.
So, das wars auch schon wieder. Ich hoffe du konntest etwas neues dazulernen und die Anwendungsbeispiele haben dir geholfen. Ich bin mir sicher, dass es noch genügend andere Anwendungsmöglichkeiten für die Funktion substr() gibt.
· zurück zu "PHP Tutorials"






