strcasecmp() vergleicht zwei Zeichenketten, ohne ihre Groß- oder Kleinschreibung zu berücksichtigen in der Zeichenkette. Diese Fähigkeit spart Zeit, wenn Benutzereingaben, Nutzernamen oder andere Textdaten geprüft werden, bei denen die Schreibweise schwanken darf.

Was ist strcasecmp() und wofür wird es verwendet?
strcasecmp() setzt zwei Strings gleich, selbst wenn sich ihre Buchstabengrößen unterscheiden. Ein „a“ gilt damit als dasselbe Zeichen wie ein „A“.
Ein solcher Vergleich hilft beim Validieren von Formularfeldern oder beim Sortieren von Daten, weil er Tippvarianten zuverlässig abfängt.
Die PHP strcasecmp() Funktion im Detail
Im Alltag greifen Entwickler zu strcasecmp(), wenn sie zwei Zeichenketten direkt abgleichen möchten, ohne vorher selbst die Groß-/Kleinschreibung anzupassen. Die nächsten Abschnitte beleuchten Syntax, Parameter und Rückgabewerte Schritt für Schritt.
Syntax
Schon die Funktionssignatur zeigt den einfachen Einsatz:
int strcasecmp(string $sString1, string $sString2)
- $sString1 – erster Vergleichsstring
- $sString2 – zweiter Vergleichsstring
Beide Parameter dürfen beliebige Zeichen enthalten, auch Ziffern oder Sonderzeichen.
Rückgabewert verstehen
strcasecmp() liefert drei mögliche Ergebnisse:
Rückgabewert | Bedeutung |
0 | Strings sind identisch (case-insensitive). |
< 0 | $sString1 liegt lexikografisch vor $sString2. |
> 0 | $sString1 liegt lexikografisch hinter $sString2. |
PHP prüft die Zeichen dabei lexikografisch, also Buchstabe für Buchstabe. Es arbeitet sich von links nach rechts durch den Text, bis eine Abweichung auftaucht.
Seit PHP 8.2 ist nur noch das Vorzeichen verlässlich; die exakte Zahl kann variieren.
Wie strcasecmp() funktioniert: Binary Safe & ASCII-Grenzen
Die Funktion arbeitet binary safe: Sie verarbeitet rohe Bytes, ohne sie speziell zu interpretieren, und wandelt lediglich ASCII-Buchstaben intern in denselben Fall um. So entsteht der fallunempfindliche Vergleich.
Die ASCII-Einschränkung und fehlende Locale-Awareness
Nur Zeichen von A-Z und a-z werden fallunempfindlich behandelt. Umlaute, Akzente, das „ß“ oder Zeichen aus anderen Schriftsystemen bleiben außen vor, weil strcasecmp() weder Unicode- noch Locale-Regeln kennt.
Zeichen | Fallunempfindlich? | Hinweis |
A / a | Ja | ASCII-Bereich |
Ä / ä | Nein | Nicht ASCII |
é / É | Nein | Nicht ASCII |
ß | Nein | Nicht ASCII |
Я / я | Nein | Nicht ASCII |
strcasecmp() Anwendungsbeispiele
Die nächsten Beispiele zeigen, wie ein fallunempfindlicher Vergleich in der Praxis aussieht und worauf es dabei ankommt.
Grundlegendes Beispiel: Gleichheit unabhängig von Groß-/Kleinschreibung
<?php
/** Zwei Strings unterscheiden sich nur in der Schreibweise */
$sErgebnis = strcasecmp('Test', 'test');
/** $sErgebnis ist 0, weil die Strings gleich sind */
echo $sErgebnis;
// 0
?>
Beispiel mit ungleichen Strings
<?php
/** 'Apfel' steht alphabetisch vor 'Banane' */
$iVergleich = strcasecmp('Apfel', 'Banane');
/** $iVergleich ist < 0 */
echo $iVergleich; // z. B. -1
?>
<?php
/** 'Birne' folgt auf 'Apfel' */
$iVergleich = strcasecmp('Birne', 'Apfel');
/** $iVergleich ist > 0 */
echo $iVergleich; // z. B. 1
?>
Beispiel in einer bedingten Anweisung
<?php
$sEingabe = 'admin';
$sErwartet = 'Admin';
if (strcasecmp($sEingabe, $sErwartet) === 0) {
/** Zugang gewähren */
echo 'Willkommen!';
} else {
/** Zugang verweigern */
echo 'Benutzername falsch!';
}
?>
Beispiel: Fallunempfindliche Sortierung mit usort()
<?php
$aNamen = ['sven', 'Sven', 'Peter', 'peter', 'Anna'];
usort($aNamen, function ($sA, $sB) {
/** strcasecmp sorgt für case-insensitive Sortierung */
return strcasecmp($sA, $sB);
});
print_r($aNamen);
/** Ergebnis: ['Anna', 'Peter', 'peter', 'sven', 'Sven'] */
?>
Umgang mit Multibyte-Strings
Außerhalb des ASCII-Spektrums stößt strcasecmp() jedoch schnell an Grenzen. Umlaute, Akzente oder Zeichen anderer Alphabete bringen die Funktion aus dem Takt.
Das Problem
<?php
$iVergleich = strcasecmp('Straße', 'straße');
/** Ergebnis ist nicht 0, weil ß und s nicht gleichgesetzt werden */
echo $iVergleich;
?>
Die Lösung: mb_strcasecmp()
Die Multibyte-Funktion mb_strcasecmp() vergleicht auch Nicht-ASCII-Zeichen zuverlässig.
Syntax
int mb_strcasecmp(
string $sString1, string $sString2, ?string $sEncoding = null)
sString1 und sString2 sind die beiden Zeichenketten, die geprüft werden sollen. Das optionale $encoding legt den Zeichensatz fest (z. B. “UTF-8”).
Beispiel
<?php
/** Multibyte-Extension muss aktiv sein */
$iVergleich = mb_strcasecmp('Straße', 'straße', 'UTF-8');
/** $iVergleich ist 0 */
echo $iVergleich;
?>
Alternative Methode: Umwandlung und Vergleich
Steht mb_strcasecmp() nicht zur Verfügung, lässt sich der Vergleich auch über eine Kombination aus mb_strtolower() und strcmp() nachbilden:
<?php
$sA = mb_strtolower('Straße', 'UTF-8');
$sB = mb_strtolower('straße', 'UTF-8');
$iVergleich = strcmp($sA, $sB);
echo $iVergleich; // 0
?>
strcasecmp() im Vergleich zu ähnlichen Funktionen
strcasecmp() gehört zu einer kleinen Familie von Vergleichsfunktionen. Die Tabelle fasst die wesentlichen Unterschiede zusammen:
Funktion | Case-Sensitivity | Typischer Einsatz |
strcmp() | Ja | Exakter Vergleich, Groß-/Kleinschreibung zählt |
strcasecmp() | Nein | ASCII-Strings ohne Beachtung der Schreibweise |
strncasecmp() | Nein | Wie strcasecmp(), aber auf n Zeichen begrenzt |
stristr() | Nein | Teilstrings suchen, case-insensitive (ASCII) |
mb_strcasecmp() | Nein | Unicode-fähiger Vergleich über alle Zeichensätze |
Kurzer Vergleich
- strcmp() nutzt man, wenn die exakte Schreibweise relevant ist.
- strcasecmp() reicht, wenn ausschließlich ASCII-Zeichen vorkommen.
- strncasecmp() beschränkt den Vergleich auf eine feste Zeichenzahl.
- stristr() hilft, einen Teilstring ohne Beachtung der Schreibweise zu finden.
- mb_strcasecmp() ist die moderne Wahl für Texte jenseits von reinen ASCII-Daten.
PHP Versionskompatibilität
strcasecmp() existiert seit PHP 4. Seit Version 8.2 garantiert PHP nur noch das Vorzeichen des Rückgabewerts; die genaue Zahl kann abweichen.
Zusammenfassung & Fazit
strcasecmp() erledigt den fallunempfindlichen Vergleich von ASCII-Strings schnell und zuverlässig. Bei Texten mit Umlauten, Akzenten oder fremden Schriften greift man besser zu mb_strcasecmp() oder einem ähnlichen Unicode-tauglichen Ansatz. Die Wahl der Funktion sollte daher stets vom erwarteten Zeichensatz abhängen: ASCII? → strcasecmp(). Alles andere? → mb_strcasecmp() oder entsprechende Alternativen.