Start · Sprachen · PHP · Referenz · normalizer_get_raw_decomposition

normalizer_get_raw_decomposition

Funktion

Liefert das rohe <code>Decomposition_Mapping</code> aus der Unicode-Datenbank für einen einzelnen UTF-8-codierten Codepoint.

seit PHP 7.3.0 Kategorie: string

Signatur

normalizer_get_raw_decomposition(string $input, int $form = Normalizer::FORM_NFC): ?string

Beschreibung

normalizer_get_raw_decomposition() gibt die im Unicode-Zeichendatensatz hinterlegte Decomposition_Mapping-Eigenschaft für genau einen UTF-8-Codepoint zurück. Im Gegensatz zu normalizer_normalize(), das komplette Strings normalisiert, arbeitet diese Funktion auf der Ebene eines einzelnen Zeichens und liefert die rohe Zerlegung direkt aus der Unicode-Datenbank, ohne weitere Faltungs- oder Kompositionsschritte.

Die Funktion eignet sich besonders dann, wenn man gezielt wissen möchte, wie ein bestimmtes Zeichen kanonisch oder kompatibel zerlegt wird – etwa bei der Implementierung eigener Normalisierungsroutinen, bei der Analyse von Unicode-Zeichen oder beim Debuggen von Zeichenkodierungsproblemen.

Der Parameter form erlaubt die Wahl zwischen kanonischer Zerlegung (Normalizer::NFD / Normalizer::NFKD) und Kompatibilitätszerlegung. Zeichen ohne eingetragene Zerlegung liefern null zurück.

Die Funktion ist Teil der Intl-Erweiterung und steht als prozedurale Entsprechung zur Methode Normalizer::getRawDecomposition() zur Verfügung.

Parameter

Name Typ Default Beschreibung
$input Pflicht string Ein einzelner UTF-8-codierter Codepoint, dessen Decomposition_Mapping abgefragt werden soll. Enthält der String mehr als einen Codepoint, gibt die Funktion null zurück.
$form int Normalizer::FORM_NFC Die Unicode-Normalisierungsform. Typischerweise wird Normalizer::NFD für kanonische oder Normalizer::NFKD für Kompatibilitätszerlegung verwendet. Konstanten der Klasse Normalizer verwenden.

Rückgabewert

Typ
?string
Beschreibung
Gibt einen UTF-8-String mit der rohen Zerlegung des Codepoints zurück, oder null, wenn der Codepoint keine Zerlegung besitzt, der Eingabe-String leer ist oder mehr als einen Codepoint enthält.

Beispiele

Zerlegung eines zusammengesetzten Zeichens abfragen

<?php
// 'ä' (U+00E4) hat eine kanonische Zerlegung in 'a' + Combining Diaeresis (U+0308)
$zeichen = "\u{00E4}"; // ä
$zerlegung = normalizer_get_raw_decomposition($zeichen, Normalizer::NFD);

if ($zerlegung !== null) {
    echo "Zerlegung gefunden: ";
    // Hexadezimale Codepoints ausgeben
    $laenge = mb_strlen($zerlegung);
    for ($i = 0; $i < $laenge; $i++) {
        $cp = mb_substr($zerlegung, $i, 1);
        echo sprintf('U+%04X ', mb_ord($cp));
    }
    echo PHP_EOL;
} else {
    echo "Keine Zerlegung vorhanden." . PHP_EOL;
}
Zerlegung gefunden: U+0061 U+0308

Zeichen ohne Zerlegung und Fehlerfall

<?php
// 'a' (U+0061) hat keine Zerlegung
$ohneZerlegung = normalizer_get_raw_decomposition('a', Normalizer::NFD);
var_dump($ohneZerlegung); // NULL

// Mehr als ein Codepoint liefert ebenfalls NULL
$mehrereCodepoints = normalizer_get_raw_decomposition('ab', Normalizer::NFD);
var_dump($mehrereCodepoints); // NULL

// Kompatibilitätszerlegung: 'fi' (U+FB01, fi-Ligatur)
$ligatur = "\u{FB01}";
$kompat = normalizer_get_raw_decomposition($ligatur, Normalizer::NFKD);
if ($kompat !== null) {
    echo "Kompatibilitätszerlegung von fi: " . $kompat . PHP_EOL; // fi
}
NULL NULL Kompatibilitätszerlegung von fi: fi

// Wichtig · Fallstricke

Achtung: Die Funktion erwartet exakt einen UTF-8-Codepoint als Eingabe. Strings mit mehreren Zeichen werden stillschweigend mit null quittiert, ohne eine Warnung auszugeben. Es empfiehlt sich daher, die Eingabe vorab mit mb_strlen() zu prüfen.

Die Funktion setzt die Intl-Erweiterung voraus (ext-intl), die standardmäßig nicht in jeder PHP-Installation aktiv ist. Prüfe mit extension_loaded('intl') die Verfügbarkeit.

Sie steht erst ab PHP 7.3.0 zur Verfügung. Für ältere Versionen gibt es keine direkte Alternative in der Intl-Erweiterung.