Start · Sprachen · PHP · Referenz · msgfmt_parse_message

msgfmt_parse_message

Funktion

Parst einen formatierten String schnell anhand eines ICU-Musters und gibt die extrahierten Werte als Array zurück.

seit PHP 5.3.0 Kategorie: string

Signatur

msgfmt_parse_message(string $locale, string $pattern, string $message): array|false

Beschreibung

msgfmt_parse_message() ist die prozedurale Variante der Methode MessageFormatter::parseMessage(). Sie erstellt intern ein temporäres MessageFormatter-Objekt für das angegebene Locale und Muster und parst den übergebenen String, ohne dass ein dauerhaftes Objekt erzeugt werden muss.

Die Funktion analysiert den formatierten $message-String anhand des ICU-MessageFormat-Musters $pattern und extrahiert die darin enthaltenen Platzhalterwerte. Das Ergebnis ist ein numerisch indiziertes Array mit den geparsten Werten in der Reihenfolge, wie sie im Muster definiert sind.

Typische Anwendungsfälle sind das Dekodieren von lokalisierten Nachrichten, bei denen Werte wie Zahlen, Währungen oder Datumsangaben aus einem bereits formatierten Text wieder herausgelöst werden sollen – zum Beispiel zum Testen, zur Validierung oder zur Weiterverarbeitung von lokalisierten Datenausgaben.

Zu beachten ist, dass das Parsen nur für einfache Muster zuverlässig funktioniert. Komplexe Muster mit Pluralregeln oder verschachtelten Ausdrücken werden möglicherweise nicht korrekt geparst.

Parameter

Name Typ Default Beschreibung
$locale Pflicht string Das Locale (z. B. 'de_DE' oder 'en_US'), das für den Parsvorgang verwendet wird. Beeinflusst die Interpretation von Zahlen, Datumsangaben und anderen formatierten Werten.
$pattern Pflicht string Das ICU-MessageFormat-Muster, das die Struktur der zu parsenden Nachricht beschreibt, z. B. '{0} hat {1} Äpfel.'.
$message Pflicht string Der formatierte String, der geparst werden soll. Er muss strukturell zum $pattern passen, damit die Extraktion der Werte gelingt.

Rückgabewert

Typ
array|false
Beschreibung
Gibt bei Erfolg ein numerisch indiziertes Array der geparsten Werte zurück. Die Reihenfolge der Werte entspricht den Platzhaltern im Muster. Bei einem Fehler (z. B. wenn der String nicht zum Muster passt) wird false zurückgegeben.

Beispiele

Einfaches Parsen einer lokalisierten Nachricht

<?php
$locale  = 'de_DE';
$pattern = '{0} hat {1} Äpfel gekauft.';
$message = 'Anna hat 5 Äpfel gekauft.';

$result = msgfmt_parse_message($locale, $pattern, $message);

if ($result !== false) {
    echo 'Name:   ' . $result[0] . PHP_EOL;
    echo 'Anzahl: ' . $result[1] . PHP_EOL;
} else {
    echo 'Parsen fehlgeschlagen.';
}
Name: Anna Anzahl: 5

Parsen einer Zahl mit Locale-spezifischer Formatierung

<?php
$locale  = 'de_DE';
$pattern = 'Der Preis beträgt {0, number} Euro.';
$message = 'Der Preis beträgt 1.234 Euro.';

$result = msgfmt_parse_message($locale, $pattern, $message);

if ($result !== false) {
    var_dump($result[0]);
} else {
    echo 'Parsen fehlgeschlagen.';
}
float(1234)

Fehlerbehandlung bei nicht passendem String

<?php
$locale  = 'en_US';
$pattern = 'Hello, {0}! You have {1, number} messages.';
$message = 'Completely unrelated text.';

$result = msgfmt_parse_message($locale, $pattern, $message);

if ($result === false) {
    echo 'Parsen fehlgeschlagen: String passt nicht zum Muster.';
}
Parsen fehlgeschlagen: String passt nicht zum Muster.

// Wichtig · Fallstricke

Einschränkungen beim Parsen: Das ICU-MessageFormat-Parsen ist inhärent mehrdeutig. Wenn Muster keinen klar abgrenzbaren Trenntext zwischen Platzhaltern enthalten, kann das Ergebnis unvorhersehbar sein oder fehlschlagen. Einfache Muster mit eindeutigen Trennzeichen funktionieren am zuverlässigsten.

Komplexe Muster: Muster mit select-, plural- oder verschachtelten Strukturen werden beim Parsen möglicherweise nicht korrekt verarbeitet, da ICU das Rückparsen solcher Konstrukte nicht vollständig unterstützt.

Erweiterung erforderlich: Die Funktion gehört zur intl-Erweiterung, die beim PHP-Build aktiviert sein muss. Überprüfe mit extension_loaded('intl'), ob sie verfügbar ist.