Ich schreibe heute hier mal ein Tutorial über die php- Funktion strpos(). Diese Funktion sucht nach einem bestimmten Zeichen innerhalb einer Zeichenkette. Jedoch gibt es wie bei den meisten php- Funktionen verschiedene weitere Parameter, die man verwenden kann. In dem ersten Beispiel wird jedoch die einfachste Form verwendet.
Beispiel eins:
<?php
/*
* Created on 28.12.2009 by Nico Schubert
*/
$zeichenkette = 'Das ist ein Satz mit ein Punkt am
Ende.';
$position_des_zeichen = strpos($zeichenkette, ".");
echo $position_des_zeichen;
?>
Hier wird der Funktion an erster Stelle eine Variable $zeichenkette übergeben, in der sich, wie der Name schon vermuten lässt, eine Zeichenkette befindet. Die zweite übergebene Variable ist das Zeichen, was gesucht werden soll, in diesem Fall der Punkt. Die Ausgabe dieses Aufrufes ist dann „38“. Im zweiten Beispiel wird noch eine weitere Variable übergeben.
Beispiel zwei:
<?php
/*
* Created on 28.12.2009 by Nico Schubert
*/
$zeichenkette = 'Test. Das ist ein Satz.';
$position_des_zeichen = strpos($zeichenkette, ".",
5);
echo $position_des_zeichen;
?>
Die Funktion arbeitet hier genau wie im ersten Beispiel, jedoch übergibt man der Funktion an der dritten Stelle einen Offset, das heißt die ersten Zeichen der übergebenen Zeichenkette werden ignoriert und die Suche wird erst nach dem Offset begonnen. In diesem Fall ist es die "5", also werden die ersten fünf Zeichen und somit auch der erste Punkt ignoriert. Die Ausgabe ist dann trotzdem „22“, da bei der Ausgabe der Funktion des Offsets nicht mit berücksichtigt wird.
Wichtig ist es auch noch zu erwähnen, dass diese Funktion nicht immer eine Zahl zurückliefert, wenn also das gesuchte Zeichen nicht in der Zeichenkette vorhanden ist, liefert die Funktion ein boolsches „false“ zurück. Sollte man die Zahl weiterverarbeiten wollen, so muss man diesen Umstand vor der Weiterbearbeitung prüfen. Seit PHP 5 ist es auch möglich, anstelle eines einzelnen Zeichens eine komplette Zeichenkette als Suchbegriff anzugeben.
Achtung: Der häufigste strpos()-Fehler
Da strpos() die Position 0 zurückgibt, wenn das Zeichen ganz am Anfang steht, führt ein Vergleich mit == false zu einem falschen Ergebnis. Der Wert 0 wird von PHP bei einem losen Vergleich als false interpretiert. Verwende deshalb immer den strikten Vergleich === false:
<?php
$text = 'PHP ist toll';
/* Falsch: 0 wird als false gewertet */
if (strpos($text, 'PHP') == false) {
echo 'Nicht gefunden'; // wird ausgegeben!
}
/* Richtig: strikter Vergleich */
if (strpos($text, 'PHP') === false) {
echo 'Nicht gefunden';
} else {
echo 'Gefunden an Position ' . strpos($text, 'PHP');
}
?>
PHP 8: str_contains() als einfachere Alternative
Wer nur wissen möchte, ob ein Teilstring vorhanden ist, ohne die genaue Position zu benötigen, kann seit PHP 8.0 die Funktion str_contains() verwenden. Das ist kürzer und vermeidet den === false Fallstrick:
<?php
$text = 'Das ist ein Beispieltext.';
if (str_contains($text, 'Beispiel')) {
echo 'Der Text enthält "Beispiel".';
}
?>
Zusätzlich gibt es seit PHP 8.0 auch str_starts_with() und str_ends_with(), die prüfen ob eine Zeichenkette mit einem bestimmten Text beginnt oder endet.