Bernhard Krämer

Webentwickler / IT-Berater

Single post

Name in URL-Alias umwandeln mit PHP und JavaScript

Setzt man bei seiner Web-Applikation SEF-URLs, also suchmaschinenfreundliche URLs, ein, so ist man schon fast gezwungen, URL-Alias zu verwenden. Da hierbei jedoch nicht alle Zeichen erlaubt sind, müssen bestimmte Zeichen ersetzt oder entfernt werden. Ich habe bei meiner Recherche auch keine Funktion gefunden, die dies für mich abnimmt und werde daher meine entwickelten Funktionen hier zur Verfügung stellen.

URL-Alias in PHP


function urlalias($name) {
    //Wandelt die Eingabe in utf8 um
    $name = utf8_encode($name);
    //Wandelt alle Buchstaben in Kleinbuchstaben um
    $name = strtolower($name);
    //Definiert alle Zeichen, welche durch Tastatureingaben eingegeben werden können
    $replacements = array(
        '^' => '',
        '°' => '',
        '!' => '',
        '"' => '',
        '§' => '',
        '$' => '',
        '%' => '',
        '&' => '',
        '/' => '',
        '(' => '',
        ')' => '',
        '=' => '',
        '?' => '',
        '`' => '',
        '²' => '',
        '³' => '',
        '{' => '',
        '[' => '',
        ']' => '',
        '}' => '',
        '\\' => '',
        'ß' => 'ss',
        '´' => '',
        'ü' => 'ue',
        'ö' => 'oe',
        'ä' => 'ae',
        '*' => '',
        '+' => '',
        '~' => '',
        '#' => '',
        '\'' => '',
        '<' => '',
        '>' => '',
        '|' => '',
        ';' => '',
        ',' => '',
        ':' => '',
        '.' => '',
        '_' => '',
        '@' => '',
        '€' => '',
        ' ' => '-'
    );
    //Ersetzt alle Zeichen aus dem Array
    $cleanAlias = strtr($name, $replacements);
    //Ersetzt mehrere aufeinander folgende "-" durch ein einzelnes
    $cleanAlias = preg_replace('/\-+/','-', $cleanAlias);
    //Gibt das letzte Zeichen des Alias zurueck
    $lastChar = substr($cleanAlias, strlen($cleanAlias)-1);
    //Erntfernt das letzte Zeichen, wenn "-"
    if ($lastChar == "-") { 
        return substr($cleanAlias, 0,strlen($cleanAlias)-1); 
    } else { 
        return $cleanAlias; 
    } 
 }

Dazu eine kurze Erklärung:

  • Als erstes wird die Eingabe in UTF8 umgewandelt. Anschließend werden alle Buchstaben in Kleinbuchstaben umgewandelt. Ich mache diesen Schritt vor dem Ersetzen der Zeichen, da ich mir so alle groß geschriebenen Zeichen spare.
  • Dann werden in einem Array alle Zeichen definiert, die ersetzt werden sollen, sowie die Zeichen, durch welche ersetzt werden soll.
  • Als nächstes werden in der Eingabe $name alle Zeichen gemäß des Arrays ersetzt.
  • Da es beim ersetzen zum mehreren aufeinander folgenden „-“ kommen kann (z.B. bei „% § &“ => „–“ ), werden im nächsten Schritt mehrere aufeinanderfolgende Minus durch ein einzelnes Minus ersetzt.
  • Im letzten Schritt wird geprüft, ob das letzte Zeichen ein Minus ist und falls dem so ist, wird dieses entfernt. Dies ist eine rein kosmetische Sache, aber ich persönliches finde es unschön, wenn eine URL mit „-“ endet.

Bei der Verwendung von Alias sollte aber nicht nur die Eingabe umgewandelt werden um saubere URLs zu bekommen, es sollte auch dafür gesorgt werden, dass ein Alias nicht doppelt vorkommen kann.

URL-Alias in JavaScript


function updateAlias(form) {
    var carname = $('input[name=name]').val();
    var caralias = carname.replace(/\s/g,"-").toLowerCase();
    caralias = caralias.replace(/[äáàâ]/g, "ae");
    caralias = caralias.replace(/[öóòô]/g, "oe");
    caralias = caralias.replace(/[üúùû]/g, "ue");
    caralias = caralias.replace(/\ß/g, "ss");
    caralias = caralias.replace(/[\^°!""§$%&/()=?´`²³{\[\]}\\*+~''#_:.;,<>|]/g, "");
    caralias = caralias.replace(/\-+/g,"-");
 
    lastChar = caralias.substr(caralias.length-1, 1);
    if (lastChar == "-") {
        caralias = caralias.substr(0, caralias.length-1);
    }

    if (carname != "") {
        $('input[name=alias]').val(caralias);
    }
} 

Hinweis: Die doppelte Nennung der einfachen und doppelten Anführungszeichen im regulären Ausdruck von replace() ist zwar nicht notwendig, aber stört in diesem Fall nicht. Ich habe diese eingebaut zwecks der Formatierung in diesem Beitrag.

Die JavaScript-Funktion hat den gleichen Effekt wie die PHP-Funktion. Sie dient dazu, direkt nach der Eingabe den Alias sozusagen aufzuräumen. Unabhängig davon sollte aber immer auch per PHP der Alias gesäubert werden um Komplikationen zu vermeiden, falls es einmal ein JavaScript-Problem geben sollte.

The following two tabs change content below.
entwickelt Webseiten und Webanwendungen vorwiegend auf Basis von PHP/MySQL und führt für Unternehmen Security-Awareness-Kampagnen durch. In diesem Blog schreibt er über diverse Themen rund um Webentwicklung, das Internet und dessen sichere Anwendung.