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.

Beispiel:
<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
Die Elemente Menüeinträge und Node-Titel werden auch vom Drupal Modul Pathauto benötigt, um automatisch eine Alias-URL zu erstellen. Um Probleme mit der Verarbeitung von Sonderzeichen zu vermeiden, sollte das Drupal Modul Transliteration installiert werden. Dieses Modul stellt für UTF-8-Texteingaben bereit und bereinigt Dateinamen von Umlauten. Die vorgenommenen Transliterationen sind abhängig von der eingestellte Sprache, z.B. wird damit aus "ä" "ae", wenn die deutsche Sprache eingestellt ist. Ist die englische Sprache eingestellt, wird aus "ä" "a". Und genau kann zu einem Problem werden, nämlich wenn z.B. kurzfristig eine rein deutschsprachige Website auf die englische Sprache umstellt wird und ein Node mit Sonderzeichen im Titel und aktiviertem Pathauto und Transliteration neu gespeichert wird. Dann wird plötzlich aus "ae" "a" ! Um dies zu vermeiden sollte die Datei sites/all/modules/transliteration/data/x00.php des Moduls Transliteration angepasst werden. Diese Datei enthält die Transliteration der Default-Sprache, also Englisch.
 
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.

Diesen Beitrag teilen


Weitere Beiträge dieser Kategorie

Kommentar schreiben