Ä 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!
Schlagwörter:iconv, php, sonderzeichen, transliteration, umlaute
Am 15. Oktober 2008 um 23:27 Uhr
Wow, was für ein super Tip!
Herzlichen Dank für diese elegante Lösung!
Gruß, Stefan
Am 14. August 2009 um 20:12 Uhr
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…