2014-04-18 2 views
2

Je suis en train d'écrire un script blog personnalisé et dans le cadre de celui-ci emploie un limace pour les URL de poste. Le code que j'ai pour jusqu'à présent estBesoin légère modification pour fonctionner

public function get_slug($str) { 
    // convert to lowercase 
    $str = strtolower($str); 
    // remove special chars 
    $str = preg_replace('/[^a-zA-Z0-9]/i', ' ', $str); 
    // remove what space from beginning and end 
    $str = trim($str); 
    // remove repeat spaces 
    $str = preg_replace('/\s+/', ' ', $str); 
    // replace spaces with hyphens 
    $str = preg_replace('/\s+/', '-', $str); 

    return $str; 
} 

Et cela fonctionne très bien pour la plupart des régions, mais je l'ai remarqué s'il y a un caractère spécial au milieu du mot, il remplace simplement par un trait d'union tournant « peut Tandis que je peux modifier la base de données et la corriger à la main, j'aimerais la supprimer automatiquement des caractères spéciaux au milieu des mots. pas les remplacer par un hypen.

+1

Check out [cette fonction] (http://stackoverflow.com/questions/3230012/ remplaçant les accents avec-leurs-homologues/3230193 # 3230193) en remplacement potentiel de celui-ci. –

+1

Essayez de changer l'espace à une chaîne vide dans votre premier remplacer. – Luigi

Répondre

2

Essayez de changer:

$str = preg_replace('/[^a-zA-Z0-9]/i', ' ', $str); 

à:

$str = preg_replace('/[^a-z0-9\s]/i', '', $str); 

Ce ne sera pas mis des espaces où vous ne voulez pas, mais permettre à ceux qui sont déjà là pour rester (pour l'instant). Alors vous n'aurez pas d'espaces au milieu des mots. (J'ai aussi pris la A-Z de votre regex car il est pas nécessaire puisque la chaîne est déjà minuscule et vous utilisez également le modificateur i ce qui le rend insensible à la casse de toute façon).

+0

Merci @John, encore nouveau pour PHP et extrêmement nouveau pour regex, avait obtenu ce à partir d'un tutoriel. – Railto

0

Vous remplacez le ' ici:

$str = preg_replace('/[^a-zA-Z0-9]/i', ' ', $str); 

Mettre cela avant ci-dessus:

$str = preg_replace("/'/i", '', $str); 
Questions connexes