In diesem Artikel wird die Funktionsweise des Text-Konverters "Buchstaben verdrehen" beschrieben. In diesen Konverter kannst du einen Text eingeben, welcher anschließend in einen Text mit verdrehten Buchstaben umgewandelt wird.
Inhaltsverzeichnis
Faszinierend: Gehirn versteht Text mit verdrehten Buchstaben
Kannst du den oben abgebildeten Text lesen? Wahrscheinlich schon - auch wenn es eventuell ein paar Wörter gibt, die man nicht auf Anhieb entschlüsseln kann.
Bei dem Beispieltext sind die mittleren Buchstaben zufällig vertauscht worden; der erste und der letzte Buchstabe sind unverändert an ihrer Position geblieben. Wenn man so darüber nachdenkt, ist es schon faszinierend, was unser Gehirn so alles leisten kann.
Da es aber sehr mühsam ist, solch einen Text manuell zu erstellen, also die einzelnen Buchstaben per Hand zu vertauschen, gibt es hierfür diesen Konverter. Man muss somit nur noch den Ursprungstext eingeben und diesen umwandeln lassen.
Wie funktioniert dieser Konverter?
Im Prinzip sucht dieser Konverter mit Hilfe von regulären Ausdrücken nach allen Wörtern mit mindestens vier Buchstaben, denn bei weniger Buchstaben gibt es natürlich nichts zum Vertauschen, da der erste und der letzte Buchstabe stets gleich bleiben. Die Suche nach diesen Wörtern erfolgt mittels der PHP Callback-Funktion preg_replace_callback():
$ausgabe_text = preg_replace_callback("#([A-ZÄÖÜß])([A-ZÄÖÜß]{2,})([A-ZÄÖÜß])#ui", "funktion_umwandeln", $eingabe_text);
Die extrahierten Wörter werden anschließend mit der selbst erstellten Funktion funktion_umwandeln($matches) verarbeitet und schließlich durch deren Rückgabewert ersetzt. Abhängig von der gewählten Methode werden unterschiedliche Befehle abgearbeitet. Falls die mittleren Buchstaben in einer zufälligen Reihenfolge angeordnet werden sollen, geschieht dies wie folgt:
$buchstaben = preg_split('##u', $matches[2]); // String in Array zerlegen shuffle($buchstaben); // Array zufällig durchmischen $ausgabe = $matches[1].implode($buchstaben).$matches[3]; // Einzelne Buchstaben wieder zusammenfügen return $ausgabe;
Mit preg_split() wird die innere Zeichenkette des Wortes (ohne den ersten und letzten Buchstaben) in einzelne Elemente zerlegt und in einem Array gespeichert. Prinzipiell gäbe es für diese Aufgabe besser geeignete Funktionen, jedoch funktionieren die meisten hiervon nicht mit den Umlauten Ä, Ö und Ü.
Für die Methode Umgekehrte Reihenfolge wird das Array anstelle des durchwürfelns einfach umgekehrt:
$buchstaben = preg_split('##u', $matches[2]); // String in Array zerlegen array_reverse($buchstaben); // Array umkehren $ausgabe = $matches[1].implode($buchstaben).$matches[3]; // Einzelne Buchstaben wieder zusammenfügen return $ausgabe;
Bei der aufsteigenden alphabetischen Sortierung müssen nach dem Zerlegen des Strings zunächst einmal alle Umlaute sowie das ß ersetzt werden:
$arr_replaced = array(); $sortierte_liste = array(); $buchstaben = preg_split('##u', $matches[2]); $search = array("#Ä#u", "#ä#u", "#Ö#u", "#ö#u", "#Ü#u", "#ü#u", "#ß#u"); $replace = array("Ae", "ae", "Oe", "oe", "Ue", "ue", "ss"); $arr_replaced = preg_replace($search, $replace, $buchstaben); // Zeichen ersetzen natcasesort($arr_replaced); // Sortierung in natürlicher Reihenfolge foreach ($arr_replaced as $key => $value) { $sortierte_liste[] = $buchstaben[$key]; } $ausgabe = $matches[1].implode($sortierte_liste).$matches[3]; return $ausgabe;
Für eine absteigende alphabetische Sortierung muss lediglich in Zeile 15 folgender Code eingefügt werden:
$sortierte_liste = array_reverse($sortierte_liste);