Signatur
Beschreibung
normalizer_is_normalized() ist die prozedurale Entsprechung zur Methode Normalizer::isNormalized() aus der intl-Extension. Sie prüft, ob ein gegebener UTF-8-String bereits in der gewünschten Unicode-Normalisierungsform vorliegt, ohne dabei eine Normalisierung durchzuführen.
Unicode-Normalisierung ist bei der Verarbeitung von Texten aus unterschiedlichen Quellen wichtig, da dasselbe Zeichen auf mehrere Arten kodiert werden kann (z. B. ein zusammengesetztes Zeichen vs. Basiszeichen + Kombinations-Zeichen). Bevor man zwei Strings vergleicht oder in einer Datenbank speichert, sollte man sicherstellen, dass beide in der gleichen Normalisierungsform vorliegen.
Die Funktion eignet sich gut als schnelle Vorbedingungsprüfung: Liegt der String bereits in der gewünschten Form vor, spart man sich den Aufruf von normalizer_normalize(). Typischerweise wird NFC (Normalizer::FORM_C) für Webinhalte und Datenbankeinträge verwendet.
Verfügbare Normalisierungsformen sind: Normalizer::FORM_C (NFC), Normalizer::FORM_D (NFD), Normalizer::FORM_KC (NFKC) und Normalizer::FORM_KD (NFKD). Die Funktion benötigt die PHP-Extension intl.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $string Pflicht | string | Der zu prüfende UTF-8-String. | |
| $form | int | Normalizer::FORM_C | Die Normalisierungsform als Konstante: Normalizer::FORM_C (NFC), Normalizer::FORM_D (NFD), Normalizer::FORM_KC (NFKC) oder Normalizer::FORM_KD (NFKD). |
Rückgabewert
true zurück, wenn der String bereits in der angegebenen Normalisierungsform vorliegt, andernfalls false. Gibt ebenfalls false zurück, wenn der String kein gültiges UTF-8 enthält.Beispiele
Prüfung auf NFC-Normalisierung
<?php
// NFC-normalisierter String (zusammengesetztes Zeichen ü als ein Codepoint U+00FC)
$nfc = "\xC3\xBC"; // ü als prekomponiertes Zeichen
// NFD-String (u + Combining Diaeresis: U+0075 + U+0308)
$nfd = "u\xCC\x88";
var_dump(normalizer_is_normalized($nfc, Normalizer::FORM_C)); // true
var_dump(normalizer_is_normalized($nfd, Normalizer::FORM_C)); // false
var_dump(normalizer_is_normalized($nfd, Normalizer::FORM_D)); // true
Effiziente bedingte Normalisierung
<?php
function ensureNFC(string $input): string {
if (normalizer_is_normalized($input, Normalizer::FORM_C)) {
// String ist bereits NFC — keine Konvertierung nötig
return $input;
}
return normalizer_normalize($input, Normalizer::FORM_C);
}
$text = "Cafe\xCC\x81"; // "Café" in NFD (e + combining acute)
echo ensureNFC($text); // Gibt "Café" in NFC aus
echo "\n";
var_dump(normalizer_is_normalized(ensureNFC($text), Normalizer::FORM_C));
// Wichtig · Fallstricke
Voraussetzung: Die PHP-Extension intl muss installiert und aktiviert sein. Ohne sie ist weder normalizer_is_normalized() noch die Klasse Normalizer verfügbar.
Ungültige Eingaben: Enthält der String kein gültiges UTF-8, gibt die Funktion false zurück und erzeugt eine Warnung. Eine Eingabevalidierung mit mb_check_encoding($string, 'UTF-8') ist daher empfehlenswert.
Performance: Die Prüfung ist deutlich schneller als eine vollständige Normalisierung mittels normalizer_normalize(). Bei großen Textmengen lohnt sich daher die kombinierte Nutzung beider Funktionen wie im zweiten Beispiel gezeigt.