PHP-Variable entfernen, Leerzeichen durch Bindestriche ersetzen

72

Wie kann ich eine PHP-Variable von "Mein Unternehmen & Mein Name" in "Mein-Unternehmen-Mein-Name" konvertieren?

Ich muss alles in Kleinbuchstaben schreiben, alle Sonderzeichen entfernen und Leerzeichen durch Bindestriche ersetzen.

rauben
quelle

Antworten:

245

Diese Funktion erstellt eine SEO-freundliche Zeichenfolge

function seoUrl($string) {
    //Lower case everything
    $string = strtolower($string);
    //Make alphanumeric (removes all other characters)
    $string = preg_replace("/[^a-z0-9_\s-]/", "", $string);
    //Clean up multiple dashes or whitespaces
    $string = preg_replace("/[\s-]+/", " ", $string);
    //Convert whitespaces and underscore to dash
    $string = preg_replace("/[\s_]/", "-", $string);
    return $string;
}

sollte gut sein :)

Rorypicko
quelle
1
Vielen Dank. Es ist eine schöne einfache Funktion. Es wäre schön, erweitert zu werden, um bestimmte seo-unfreundliche Schlüsselwörter wie 'das' & 'und' zu entfernen.
Rorypicko
4
Diese Frage legt nahe, dass es sich nicht lohnt, Stoppwörter zu entfernen. Ich habe einen Kern erstellt, der Rorys Lösung eine akzentuierte Zeichenbehandlung hinzufügt.
ChrisV
Wie kann ich das erste und letzte Leerzeichen ohne -Symbol entfernen ?
Kvvaradha
@Kvvaradha Fügen Sie die folgende Zeile als erste Zeile in die Funktion ein $string = trim($string);und das wird Ihr Problem lösen.
Devner
wie man das benutzt
AjithChadda
9

Ersetzen bestimmter Zeichen: http://se.php.net/manual/en/function.str-replace.php

Beispiel:

function replaceAll($text) { 
    $text = strtolower(htmlentities($text)); 
    $text = str_replace(get_html_translation_table(), "-", $text);
    $text = str_replace(" ", "-", $text);
    $text = preg_replace("/[-]+/i", "-", $text);
    return $text;
}
NoLifeKing
quelle
8

Ja, und wenn Sie mit Sonderzeichen umgehen möchten, müssen Sie diese im Muster deklarieren, da sie sonst möglicherweise gelöscht werden. Sie können es so machen:

strtolower(preg_replace('/-+/', '-', preg_replace('/[^\wáéíóú]/', '-', $string)));
Pierre Voisin
quelle