Ä zu AE – Umlaute mit PHP umwandeln

Alle Nase lang muss man als Webdeveloper Sonderzeichen gärtnern. Muss man in PHP Umlaute loswerden, ein »ß« verschwinden lassen, einen dieser Ausnahmebuchstaben tilgen – um z.B. schicke URLs wahr werden zu lassen. Oft muss es eben ACSII sein, und das ist halt ein beschissen kleiner Zeichenvorrat von 128 Zeichen. Da ist an Umlaute nicht zu denken.

Das kann man machen, indem man sich große Tabellen anlegt und weitläufiges Suchen & Ersetzen durchführt. Ein »ä« wird da zu »ae«, ein »ß« zu »ss« und so fort. Will man das richtig machen, kann man da herrlich lange Zeit mit dem Tippen von Vorher/Nachher-Zuordnungen verbringen. Super. Muss man das nun unbedingt selber durchexerzieren?

Kann PHP das vielleicht ab Werk selber erledigen? Ja, doch! Das iconv-Modul bringt so einiges mit, um Zeichenketten zwischen Kodierungen hin- und herzuwandeln. Vor allem beherrscht die Funktion iconv() die Fähigkeit zur Transliteration. Das bedeutet, dass ein Zeichen welches im Ziel-Zeichensatz nicht zur Verfügung steht, durch ähnliche Zeichen ersetzt wird. Durch Anhängen von »//TRANSLIT« an den Zielzeichensatz bringt man die Funktion dazu, die speziellen Zeichen nicht zu verwerfen, sondern umzuwandeln:

<?php
$satz = "Olé Garçon! Diese Süßspeise schmeckt gar nicht übel! *börp*";
print (iconv("UTF-8", "ASCII//TRANSLIT", $satz));
?>

Das ergibt diese Zeichenfolge (wohlgemerkt wenn die PHP-Datei in UTF-8 kodiert ist):
Ole Garcon! Diese Suessspeise schmeckt gar nicht uebel! *boerp*

Na bitte!

iconv()-Dokumentation

4 Reaktionen zu “Ä zu AE – Umlaute mit PHP umwandeln”

  1. Stefan

    Wow, was für ein super Tip! 🙂

    Herzlichen Dank für diese elegante Lösung!

    Gruß, Stefan

  2. Medina Mennert

    iconv funktioniert dummerweise (scheinbar) nur begrenzt 🙂
    ich versuche grad per PHP ein txt/csv-File hochzuladen, das im Normalfall ISO-8859–1 encoded ist. Per iconv soll dann die Konvertierung in UTF-8 erfolgen, da die gesamte PHP-Anwendung auch UTF-8-basiert ist..
    Um sicherzugehen wird die hochgeladene Datei Zeile für Zeile umcodiert.
    Funktioniert nur »fast« gut:
    sobald ein GROSSGESCHRIEBENER Umlaut am Anfang der Zeile/nach einem Komma auftaucht, versagt die Umwandlung für diesen Buchstaben (Alles andere wird korrekt umgewandelt)
    Wer also das Pech hat, von seinen Eltern »Ärenbrecht«, »Ülemtülf« oder »Ösenmacher« genannt zu werden hat hier evtl schlechte Karten…
    Großbuchstaben innerhalb »normaler« Buchstaben werden dagegen korrekt umgewandelt, »UelmetÜlf« funktioniert also..
    Ich werd das mal weiter untersuchen…

  3. Pascal

    Hab das Umlaute Problem auch. Wurde dafür vielleicht schon ne Lösung gefunden?
    Das witzige daran ist, dass er lokal auf mac funktioniert. Auf dem Linux Server nicht 🙁

    Lokal sagt mein php –info folgendes:

    iconv
    iconv support => enabled
    iconv implementation => libiconv
    iconv library version => 1.13
    iconv.input_encoding => ISO-8859–1 => ISO-8859–1
    iconv.internal_encoding => ISO-8859–1 => ISO-8859–1
    iconv.output_encoding => ISO-8859–1 => ISO-8859–1

    auf Linux server:
    iconv support => enabled
    iconv implementation => glibc
    iconv library version => 1.13
    iconv.input_encoding => ISO-8859–1 => ISO-8859–1
    iconv.internal_encoding => ISO-8859–1 => ISO-8859–1
    iconv.output_encoding => ISO-8859–1 => ISO-8859–1

    Liegt das Problem an glibc?

    Thx

  4. Martin

    Super Tipp und witzig geschrieben 🙂
    Mir gefällt vor allem der »Boerp- Beispielstring« 😉

Einen Kommentar schreiben