W3docs

metaphone()

Dieser Artikel erklärt die PHP-Funktion metaphone(), die den Metaphone-Schlüssel eines Strings berechnet – nützlich für phonetische Suchen.

Die PHP-Funktion metaphone() berechnet den Metaphone-Schlüssel eines Strings — einen Code, der beschreibt, wie der String auf Englisch klingt, nicht wie er geschrieben wird. Wörter, die gleich ausgesprochen werden, ergeben denselben (oder einen sehr ähnlichen) Schlüssel. Dadurch ist metaphone() für unscharfe Treffer nützlich: "Catherine" und "Katherine" oder "Smith" und "Smyth" werden alle auf denselben Schlüssel abgebildet.

Veraltet seit PHP 8.4.0. metaphone() funktioniert in aktuellen PHP-Versionen noch, ist aber für die Entfernung vorgesehen. Für neuen Code sollte man eine gepflegte phonetische Bibliothek bevorzugen (oder soundex() als einfachere eingebaute Alternative). Die Funktion ist hier dokumentiert, weil viele bestehende Codebasen noch auf sie angewiesen sind.

Dieser Artikel behandelt die Syntax, das optionale Argument $phonemes, einige Beispiele und den tatsächlichen Einsatzbereich von Metaphone-Schlüsseln.

Syntax

metaphone(string $string, int $phonemes = 0): string|false
ParameterBeschreibung
$stringDer zu kodierende Eingabe-String.
$phonemesOptional. Die maximale Anzahl der zurückgegebenen Zeichen (Phoneme). Bei 0 (Standardwert) wird der vollständige Schlüssel zurückgegeben.

Der Rückgabewert ist der Metaphone-Schlüssel als Großbuchstaben-String oder false bei einem Fehler.

Einfaches Beispiel

php— editable, runs on the server

Ausgabe:

HLWRLT

Nicht-Buchstaben wie ! und das Leerzeichen werden ignoriert, und das Ergebnis besteht ausschließlich aus Konsonanten- und Vokal-Lautcodes. Der Schlüssel ist nicht für Menschen lesbar gedacht — er ist ein normierter Fingerabdruck der Aussprache.

Wie der Schlüssel Laute kodiert

Metaphone wendet englische Ausspracheregeln an, sodass die Ausgabe keine Eins-zu-eins-Transliteration ist. Zwei Konventionen sind wissenswert:

  • Die Ziffer 0 (Null) steht für den „th"-Laut.
  • Stille und doppelte Buchstaben werden entfernt, und bestimmte Buchstabenpaare werden zusammengeführt (zum Beispiel wird ph zu F).
<?php
echo metaphone("Thompson"), "\n"; // 0MPSN  — "Th" → 0, silent p kept by the rule
echo metaphone("Smith"), "\n";    // SM0    — trailing "th" → 0
echo metaphone("PHP"), "\n";      // FP     — "ph" → F
?>

Ausgabe:

0MPSN
SM0
FP

Schlüssellänge mit $phonemes begrenzen

Das zweite Argument begrenzt die Anzahl der Zeichen im Schlüssel. Das ist praktisch, wenn man nur die ersten Laute langer Wörter vergleichen möchte.

<?php
echo metaphone("Thompson"), "\n";    // full key
echo metaphone("Thompson", 4), "\n"; // first 4 phonemes only
echo metaphone("Wikipedia", 4), "\n";
?>

Ausgabe:

0MPSN
0MPS
WKPT

Gleich klingende Wörter abgleichen

Der eigentliche Nutzen von Metaphone liegt im Gruppieren unterschiedlicher Schreibweisen desselben Lauts. Vergleich zweier Schreibweisen desselben Nachnamens:

<?php
$a = metaphone("Catherine");
$b = metaphone("Katherine");

echo $a, "\n";                       // K0RN
echo $b, "\n";                       // K0RN
echo $a === $b ? "Match\n" : "No\n"; // Match
?>

Ausgabe:

K0RN
K0RN
Match

Da beide Namen denselben Metaphone-Schlüssel teilen, würde ein auf metaphone() basierender Suchindex den einen zurückgeben, wenn der Nutzer den anderen eintippt — die Grundlage für „Meinten Sie …?"-Funktionen, das Deduplizieren von Kontaktlisten und tolerante Namenssuchen.

Wann es einsetzen (und was stattdessen nutzen)

AnwendungsfallHinweise
Unscharfe Namen-/WortsucheDen Metaphone-Schlüssel neben dem Originalwert indizieren und dann über den Schlüssel suchen.
Rechtschreibtolerante SuchenErfasst phonetische Tippfehler, die exaktes Matching übersieht.
Datensätze deduplizierenZeilen gruppieren, deren Namen gleich klingen.

metaphone() modelliert nur die englische Aussprache und ist daher für andere Sprachen unzuverlässig. Für Tippfehler-Distanzen statt Klang empfiehlt sich levenshtein() oder similar_text(). Für einen einfacheren, nicht veralteten phonetischen Code ist soundex() die eingebaute Alternative.

Zusammenfassung

metaphone() wandelt ein Wort in einen phonetischen Schlüssel um, sodass unterschiedlich geschriebene, aber ähnlich klingende Wörter übereinstimmen. Dabei ist zu beachten: Der Schlüssel kodiert die englische Aussprache (wobei 0 für „th" steht), das optionale Argument $phonemes kürzt die Schlüssellänge, und die Funktion ist seit PHP 8.4 veraltet — für neue Projekte sollte man soundex() oder eine gepflegte Bibliothek bevorzugen.

Übungen

Übung
Was ist der Zweck der Funktion metaphone() in PHP?
Was ist der Zweck der Funktion metaphone() in PHP?
Was this page helpful?