Signatur
Beschreibung
IntlChar ist eine finale PHP-Klasse, die eine umfangreiche Sammlung statischer Methoden und Konstanten bereitstellt, um Unicode-Zeichen zu analysieren und zu klassifizieren. Sie basiert auf der ICU-Bibliothek (International Components for Unicode) und deckt den vollen Unicode-Standard ab.
Typische Anwendungsfälle sind die Prüfung, ob ein Zeichen alphabetisch, numerisch, ein Leerzeichen oder ein Steuerzeichen ist, die Konvertierung zwischen Groß- und Kleinschreibung, die Ermittlung des Unicode-Namens oder des numerischen Wertes eines Zeichens sowie die Arbeit mit Unicode-Codepoints. Die Klasse eignet sich besonders für internationalisierte Anwendungen, die korrekt mit Zeichen aus verschiedenen Schriftsystemen umgehen müssen.
Alle Methoden sind statisch – IntlChar wird nicht instanziiert. Zeichen können als UTF-8-String (einziges Zeichen) oder als Integer-Codepoint übergeben werden. Die Erweiterung intl muss aktiviert sein.
Im Gegensatz zu einfachen ctype_*-Funktionen oder mb_*-Funktionen verarbeitet IntlChar den gesamten Unicode-Raum (U+0000 bis U+10FFFF) korrekt und liefert normkonforme Ergebnisse für alle Schriftsysteme der Welt.
Beispiele
Grundlegende Zeichenklassifizierung
<?php
// Prüfungen auf Buchstaben, Ziffer, Leerzeichen
$zeichen = ['A', '5', ' ', '€', 'ñ', '中'];
foreach ($zeichen as $z) {
$alpha = IntlChar::isalpha($z) ? 'ja' : 'nein';
$digit = IntlChar::isdigit($z) ? 'ja' : 'nein';
$space = IntlChar::isspace($z) ? 'ja' : 'nein';
$name = IntlChar::charName($z);
printf("'%s' alpha=%-4s digit=%-4s space=%-4s Name: %s\n",
$z, $alpha, $digit, $space, $name ?: '(kein Name)');
}
Codepoint-Konvertierung und Groß-/Kleinschreibung
<?php
// Codepoint ermitteln und zurückkonvertieren
$zeichen = 'Ä';
$codepoint = IntlChar::ord($zeichen);
printf("Zeichen: %s Codepoint: U+%04X\n", $zeichen, $codepoint);
// Zurück zum Zeichen
$zurück = IntlChar::chr($codepoint);
echo "Chr von Codepoint: " . $zurück . "\n";
// Groß-/Kleinschreibung
$klein = IntlChar::tolower('Ö');
$groß = IntlChar::toupper('ü');
echo "tolower('Ö') = $klein\n";
echo "toupper('ü') = $groß\n";
// Numerischer Wert eines Zeichens
echo "Numerischer Wert von '7': " . IntlChar::digit('7') . "\n";
echo "Numerischer Wert von 'Ⅷ' (röm. 8): " . IntlChar::getNumericValue('Ⅷ') . "\n";
Unicode-Blockinformation und Kategorie abrufen
<?php
$beispiele = ['A', 'α', '中', '𝄞', '🙂'];
foreach ($beispiele as $z) {
$block = IntlChar::getBlockCode($z);
$category = IntlChar::charType($z);
$upper = IntlChar::isupper($z) ? 'Ja' : 'Nein';
printf("'%s' Block: %3d Kategorie: %2d Großbuchstabe: %s\n",
$z, $block, $category, $upper);
}
// Alle Buchstaben im ASCII-Bereich ausgeben
echo "ASCII-Buchstaben: ";
IntlChar::enumChar(0x41, 0x7B, function(int $codepoint, string $char) {
if (IntlChar::isalpha($codepoint)) {
echo $char;
}
});
echo "\n";
// Wichtig · Fallstricke
Voraussetzung: Die PHP-Erweiterung intl muss installiert und aktiviert sein (in php.ini: extension=intl). Andernfalls steht die Klasse nicht zur Verfügung.
ICU-Version: Das Verhalten einzelner Methoden kann je nach installierter ICU-Version leicht variieren, da sich der Unicode-Standard weiterentwickelt. Mit IntlChar::UNICODE_VERSION lässt sich die verwendete Unicode-Version ermitteln.
Eingabeformat: Methoden akzeptieren Zeichen wahlweise als UTF-8-String (genau ein Zeichen/Graphem) oder als Integer-Codepoint. Bei mehrbytigen Zeichen (z. B. Emoji) als Integer den vollständigen Unicode-Codepoint angeben, nicht einzelne UTF-8-Bytes.
Nicht instanziierbar: IntlChar kann nicht mit new instanziiert werden; alle Mitglieder sind statisch.