Start · Sprachen · PHP · Referenz · strpbrk

strpbrk

Funktion

Durchsucht einen String nach dem ersten Vorkommen eines beliebigen Zeichens aus einer Zeichengruppe und gibt den Teilstring ab dieser Position zurück.

seit PHP 5.0.0 Kategorie: string

Signatur

strpbrk(string $string, string $characters): string|false

Beschreibung

strpbrk() durchsucht den String $string nach dem ersten Auftreten eines beliebigen Zeichens aus $characters. Wird eines der gesuchten Zeichen gefunden, gibt die Funktion den Teilstring zurück, der an dieser Position beginnt und bis zum Ende des Ausgangsstrings reicht. Wird kein Zeichen gefunden, wird false zurückgegeben.

Im Gegensatz zu strstr() oder strpos(), die nach einer festen Zeichenkette suchen, akzeptiert strpbrk() eine Menge einzelner Zeichen und findet das erste Vorkommen eines beliebigen davon. Das macht die Funktion besonders nützlich, wenn man nach mehreren möglichen Trennzeichen oder Sonderzeichen sucht, ohne diese einzeln prüfen zu müssen.

Die Suche ist case-sensitiv, Groß- und Kleinschreibung werden also unterschieden. Die Reihenfolge der Zeichen in $characters spielt keine Rolle – es wird immer das erste Vorkommen eines der angegebenen Zeichen im Suchstring gefunden.

Typische Einsatzgebiete sind das Erkennen von Sonderzeichen in Benutzereingaben, das Auffinden von Trennzeichen in strukturierten Strings oder die schnelle Prüfung, ob ein String eines aus einer Menge unerwünschter Zeichen enthält.

Parameter

Name Typ Default Beschreibung
$string Pflicht string Der zu durchsuchende Ausgangsstring.
$characters Pflicht string Eine Zeichenkette, deren einzelne Zeichen als Suchmenge dienen. Das erste Zeichen aus dieser Menge, das im $string vorkommt, bestimmt die Rückgabe.

Rückgabewert

Typ
string|false
Beschreibung
Gibt den Teilstring zurück, der beim ersten gefundenen Zeichen aus $characters beginnt und bis zum Ende des Ausgangsstrings reicht. Wird keines der Zeichen gefunden, gibt die Funktion false zurück.

Beispiele

Erstes Sonderzeichen in einer E-Mail-Adresse finden

<?php
$email = 'benutzer@example.com';
$result = strpbrk($email, '@.');

if ($result !== false) {
    echo 'Gefunden ab Position: ' . $result . PHP_EOL;
} else {
    echo 'Kein Sonderzeichen gefunden.' . PHP_EOL;
}
Gefunden ab Position: @example.com

Prüfen, ob ein String unerwünschte Zeichen enthält

<?php
$eingaben = [
    'NormalerText',
    'Text<mit>HTML',
    'Kein Problem hier',
    'Semikolon;drin',
];

$verboten = '<>;&"\'';

foreach ($eingaben as $eingabe) {
    if (strpbrk($eingabe, $verboten) !== false) {
        echo "Ungültige Eingabe: $eingabe" . PHP_EOL;
    } else {
        echo "OK: $eingabe" . PHP_EOL;
    }
}
OK: NormalerText Ungültige Eingabe: Text<mit>HTML OK: Kein Problem hier Ungültige Eingabe: Semikolon;drin

Position des ersten Treffers ermitteln

<?php
$string = 'Hello, World!';
$treffer = strpbrk($string, 'aeiouAEIOU');

if ($treffer !== false) {
    $position = strlen($string) - strlen($treffer);
    echo 'Erster Vokal "' . $treffer[0] . '" an Position: ' . $position . PHP_EOL;
}
Erster Vokal "e" an Position: 1

// Wichtig · Fallstricke

Wichtig: Der Rückgabewert ist false, wenn kein Zeichen gefunden wird. Da false und ein leerer String in PHP als gleich bewertet werden können, sollte stets ein strikter Vergleich mit !== false verwendet werden, um Fehler zu vermeiden.

Sicherheitshinweis: strpbrk() eignet sich für eine einfache Blacklist-Prüfung auf Sonderzeichen, ersetzt jedoch keine vollständige Eingabevalidierung oder -sanitisierung. Für sicherheitskritische Eingabeverarbeitung (z. B. zur XSS- oder SQL-Injection-Vermeidung) sollten spezialisierte Funktionen wie htmlspecialchars() oder vorbereitete Datenbankabfragen eingesetzt werden.

Die Funktion ist nicht multibyte-fähig. Bei UTF-8-Strings mit Multibyte-Zeichen (z. B. Umlauten) können unerwartete Ergebnisse auftreten, da jedes Byte einzeln betrachtet wird. Für Multibyte-Szenarien sollte eine alternative Lösung auf Basis von mb_-Funktionen genutzt werden.