Drupal 7: Deutsche Umlaute in URL und Breadcrumb
Erstellt man eine Drupal Website in deutscher Sprache, wird man früher oder später mit einer Eigenart unserer Sprache konfrontiert: Umlaute und Sonderzeichen (ä, Ä, ö, Ö, ü, Ü, ß). Meistens eher später als früher, denn die korrekte Darstellung einer Web-Seite mit diesen Sonderzeichen bereitet Browsern keine Probleme und so scheint alles in Ordnung zu sein. Probleme fallen möglicherweise erst später auf, nämlich wenn Lesbare URLs aktiviert sind und das Drupal Module Pathauto eingesetzt wird. Dazu weiter unten mehr.
Erst einmal soll erläutert werden, was zu beachten ist, damit jeder Browser die deutschen Sonderzeichen auch wirklich korrekt und leserlich darstellt. Sonderzeichen werden im Unicode übertragen. In der Regel wird die Zeichenkodierung UTF-8 verwendet. Im HTTP wird die Zeichenkodierung dem Browser im Header-Feld Content-Type mitgeteilt. Das Feld Content-Type ist dafür vorgesehen, neben dem Inhaltstyp (etwa text/html für ein HTML-Dokument) auch die Zeichenkodierung (verwirrenderweise als „charset“ bezeichnet) anzugeben.
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
...
</head>
Mit diesen Einstellungen werden alle Sonderzeichen, auch Elemente wie Menüeinträge und Node-Titel, mit Sonderzeichen korrekt im Browser dargestellt
Alias-URL
Breadcrumb
Im Breadcrumb wird die Menu-Hierarchie und ggf. der Node-Titel dargestellt. Wird Transliteration verwendet, enthält der Breadcrumb keine deutschen Umlaute mehr. Das sieht nicht nur unschön aus, sondern erschwert auch das Lesen des Breadcrumbs. Um das zu ändern, kann theme_breadcrumb() überschrieben werden.
function theme_breadcrumb($variables) { $breadcrumb = $variables['breadcrumb']; $segments_quantity = $variables['segments_quantity']; ... $search = array("Ae", "Oe", "Ue", "ae", "oe", "ue"); $replace = array("Ä", "Ö", "Ü", "ä", "ö", "ü"); if ($segments_quantity > 0) { ... for ($i = 0, $s = $segments_quantity - 1; $i < $segments_quantity; ++$i) { $breadcrumb[$i]['content'] = str_replace($search, $replace, $breadcrumb[$i]['content']); ... } ... } return $html; }
Die PHP-Funktion str_replace() tauscht alle "ausgeschriebenen" Umlaute durch UTF-8 Umlaute aus.
user
Gründer und Geschäftsführer der mosteva GmbH & Co. KG
Softwareentwicklung, Internettechnologien, Webprogrammierung.