Start · Sprachen · PHP · Referenz · IntlChar

IntlChar

Klasse

Bietet statische Methoden und Konstanten für den Zugriff auf Unicode-Zeicheneigenschaften und -informationen gemäß dem ICU-Standard.

seit PHP 7.0.0 Kategorie: string

Signatur

class IntlChar

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 statischIntlChar 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)');
}
'A' alpha=ja digit=nein space=nein Name: LATIN CAPITAL LETTER A '5' alpha=nein digit=ja space=nein Name: DIGIT FIVE ' ' alpha=nein digit=nein space=ja Name: SPACE '€' alpha=nein digit=nein space=nein Name: EURO SIGN 'ñ' alpha=ja digit=nein space=nein Name: LATIN SMALL LETTER N WITH TILDE '中' alpha=ja digit=nein space=nein Name: CJK UNIFIED IDEOGRAPH-4E2D

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";
Zeichen: Ä Codepoint: U+00C4 Chr von Codepoint: Ä tolower('Ö') = ö toupper('ü') = Ü Numerischer Wert von '7': 7 Numerischer Wert von 'Ⅷ' (röm. 8): 8

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";
'A' Block: 1 Kategorie: 1 Großbuchstabe: Ja 'α' Block: 7 Kategorie: 2 Großbuchstabe: Nein '中' Block: 71 Kategorie: 5 Großbuchstabe: Nein '𝄞' Block: 143 Kategorie: 5 Großbuchstabe: Nein '🙂' Block: 232 Kategorie: 5 Großbuchstabe: Nein ASCII-Buchstaben: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

// 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.