Signatur
Beschreibung
count_chars() analysiert einen String auf Byte-Ebene und zählt das Vorkommen jedes der 256 möglichen Byte-Werte (0–255). Das Verhalten der Funktion wird über den Parameter mode gesteuert, der bestimmt, in welchem Format und mit welchem Inhalt das Ergebnis zurückgegeben wird.
Die Modi 0–2 liefern jeweils ein Array, bei dem die Schlüssel die ASCII-Werte (0–255) repräsentieren. Modus 0 enthält alle Zeichen mit ihrer Häufigkeit, Modus 1 nur die tatsächlich vorkommenden Zeichen und Modus 2 nur die Zeichen, die nicht im String vorkommen. Die Modi 3 und 4 hingegen geben einen String zurück: Modus 3 enthält alle im String vorhandenen eindeutigen Zeichen, Modus 4 alle Zeichen, die im String nicht vorkommen.
Typische Anwendungsgebiete sind die Häufigkeitsanalyse von Texten, das Finden verwendeter oder nicht verwendeter Zeichen, einfache Kryptographie-Übungen sowie die Validierung von Zeichensätzen in Eingabestrings.
Wichtig: Die Funktion arbeitet rein auf Byte-Ebene und ist nicht multibyte-sicher. Bei UTF-8-Strings mit Zeichen außerhalb des ASCII-Bereichs werden die einzelnen Bytes gezählt, nicht die vollständigen Zeichen (Code Points).
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $string Pflicht | string | Der zu analysierende Eingabe-String. | |
| $mode | int | 0 | Legt das Rückgabeformat fest:
|
Rückgabewert
array zurückgegeben, bei den Modi 3 und 4 ein string. Bei einem ungültigen mode-Wert gibt die Funktion false zurück.Beispiele
Häufigkeit aller vorkommenden Zeichen ermitteln (Modus 1)
<?php
$text = 'Hallo Welt!';
$haeufigkeiten = count_chars($text, 1);
foreach ($haeufigkeiten as $byte => $anzahl) {
printf("Zeichen '%s' (ASCII %d) kommt %d Mal vor.\n", chr($byte), $byte, $anzahl);
}
Nicht verwendete Zeichen als String ausgeben (Modus 4)
<?php
$passwort_kandidat = 'abc123XYZ';
$nicht_verwendet = count_chars($passwort_kandidat, 4);
echo "Im String nicht enthaltene Zeichen (Auswahl):\n";
// Nur druckbare ASCII-Zeichen (32–126) filtern
$druckbar = array_filter(
str_split($nicht_verwendet),
fn($c) => ord($c) >= 32 && ord($c) <= 126
);
echo implode('', $druckbar);
Zeichenhäufigkeit für einfache Kryptanalyse (Modus 0)
<?php
$text = 'das ist ein einfacher beispieltext';
$alle = count_chars($text, 0);
// Nur Buchstaben ausgeben
foreach (range(ord('a'), ord('z')) as $ascii) {
if ($alle[$ascii] > 0) {
echo chr($ascii) . ': ' . str_repeat('|', $alle[$ascii]) . ' (' . $alle[$ascii] . ')' . PHP_EOL;
}
}
// Wichtig · Fallstricke
Multibyte-Einschränkung: count_chars() ist nicht für multibyte-kodierte Strings (z. B. UTF-8) geeignet. Zeichen außerhalb des ASCII-Bereichs werden als mehrere Einzel-Bytes gezählt, was zu falschen Ergebnissen führt. Für multibyte-sichere Zeichenanalyse sollte man mb_*-Funktionen oder manuelle Verarbeitung mit preg_split() und dem u-Flag verwenden.
Bei einem ungültigen mode-Wert (außerhalb von 0–4) gibt die Funktion false zurück und erzeugt eine Warnung.