[Script PHP] Fonctions pour créer un slug (SEO friendly URL)
23 messages
• Page 1 sur 2 • 1, 2
-

spout - WRInaute accro

- Messages: 4378
- Inscription: 14 Mai 2003
[Script PHP] Fonctions pour créer un slug (SEO friendly URL)
Bonjour,
J'aimerais savoir ce que vous utilisez comme fonction dite de "slug": pour transformer un titre en URL.
Voici la fonction que j'utilise:
Mais ce la ne fonctionne pas bien pour des titres style:
- mon,super,titre (cela donne: monsupertitre, je voudrais: mon-super-titre)
- super...formidable (cela donne: superformidable)
Je me tourne vers vous afin de peut-être trouver une meilleure fonction.
J'aimerais savoir ce que vous utilisez comme fonction dite de "slug": pour transformer un titre en URL.
Voici la fonction que j'utilise:
- Code: Tout sélectionner
function slug($slug){
$bad = array( 'Š','Ž','‘','ž','Ÿ','À','Á','Â','Ã','Ä','Å','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ñ',
'Ò','Ó','Ô','Õ','Ö','Ø','Ù','Ú','Û','Ü','Ý','à','á','â','ã','ä','å','ç','è','é','ê',
'ë','ì','í','î','ï','ñ','ò','ó','ô','õ','ö','ø','ù','ú','û','ü','ý','ÿ',
'Þ','þ','Ð','ð','ß','Œ','œ','Æ','æ','µ',
'”',"'",'“','"',"\n","\r",'_','&',':','/');
$good = array( 'S','Z','s','z','Y','A','A','A','A','A','A','C','E','E','E','E','I','I','I','I','N',
'O','O','O','O','O','O','U','U','U','U','Y','a','a','a','a','a','a','c','e','e','e',
'e','i','i','i','i','n','o','o','o','o','o','o','u','u','u','u','y','y',
'TH','th','DH','dh','ss','OE','oe','AE','ae','u',
'','-','','','','','-','','','');
// replace strange characters with alphanumeric equivalents
$slug = str_replace( $bad, $good, $slug );
$slug = trim($slug);
// remove any duplicate whitespace, and ensure all characters are alphanumeric
$bad_reg = array('/\s+/','/[^A-Za-z0-9\-]/');
$good_reg = array('-','');
$slug = preg_replace($bad_reg, $good_reg, $slug);
// and lowercase
$slug = strtolower($slug);
return $slug;
}
Mais ce la ne fonctionne pas bien pour des titres style:
- mon,super,titre (cela donne: monsupertitre, je voudrais: mon-super-titre)
- super...formidable (cela donne: superformidable)
Je me tourne vers vous afin de peut-être trouver une meilleure fonction.
-

Bool - WRInaute passionné

- Messages: 1290
- Inscription: 26 Fév 2004
Hello,
moi j'utilise ça depuis des années :
Le soucis étant que la première chaine est encodée en "windows cp1252" ; si bien que ce code est difficilement modifiable sous une autre plateforme...
Sinon :
- mon,super,titre donne mon-super-titre
- super....formidable donne super-formidable
- "super titre !" donne super-titre
moi j'utilise ça depuis des années :
- Code: Tout sélectionner
static public function rewrite( $chaine )
{
// remplace les caractères accentués par leur version non accentuée
$id = strtr( $chaine,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖØÙÚÛÜÝàáâãäåçèéêëìíîïñòóôõöøùúûüýÿ',
'SZszYAAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy' );
// remplace les caractères non standards
$id = preg_replace(
array(
'`^[^A-Za-z0-9]+`',
'`[^A-Za-z0-9]+$`',
'`[^A-Za-z0-9]+`' ),
array('','','-'),
$id );
return $id;
}
Le soucis étant que la première chaine est encodée en "windows cp1252" ; si bien que ce code est difficilement modifiable sous une autre plateforme...
Sinon :
- mon,super,titre donne mon-super-titre
- super....formidable donne super-formidable
- "super titre !" donne super-titre
- darkjukka
- WRInaute impliqué

- Messages: 669
- Inscription: 28 Avr 2007
- Code: Tout sélectionner
function format_url( $url, $type = '' ) {
$url = preg_replace("`\[.*\]`U","",$url);
$url = preg_replace('`&(amp;)?#?[a-z0-9]+;`i','-',$url);
$url = htmlentities($url, ENT_NOQUOTES, 'ISO-8859-1');
$url = preg_replace( "`&([a-z])(acute|uml|circ|grave|ring|cedil|slash|tilde|caron|lig);`i","\\1", $url );
$url = preg_replace( array("`[^a-z0-9]`i","`[-]+`") , "-", $url);
$url = ( $url == "" ) ? $type : strtolower(trim($url, '-'));
return $url;
}
La meilleure que j'ai trouvé
- darkjukka
- WRInaute impliqué

- Messages: 669
- Inscription: 28 Avr 2007
Celle où tu sens le meilleur feeling ? ^^
Au début j'en avais une autre différente dans le genre de la première postée mais je ne la trouvais vraiment pas "propre" (va savoir pourquoi). Puis je suis tombé sur celle-ci et elle m'a plus en m'offrant des choses encore mieux que l'autre (les - au lieu des _, la suppression des espace a la fin du titre quand y'avait " !") donc je l'ai adopté et puis le fait que ce soit celle utilisée par phpbbSEO pour ses mods de rewrite, cela m'a donné confiance.
Au début j'en avais une autre différente dans le genre de la première postée mais je ne la trouvais vraiment pas "propre" (va savoir pourquoi). Puis je suis tombé sur celle-ci et elle m'a plus en m'offrant des choses encore mieux que l'autre (les - au lieu des _, la suppression des espace a la fin du titre quand y'avait " !") donc je l'ai adopté et puis le fait que ce soit celle utilisée par phpbbSEO pour ses mods de rewrite, cela m'a donné confiance.
- KMAMa2f
- Nouveau WRInaute

- Messages: 29
- Inscription: 7 Juin 2006
Bonjour,
Voici se que je me suis codé
Voici se que je me suis codé
- Code: Tout sélectionner
function StringClean($Str){
$Str = strtolower($Str);
$Str = strtr($Str, 'àáâãäåòóôõöøèéêëçìíîïùúûüÿñ', 'aaaaaaooooooeeeeciiiiuuuuyn');
# Ponctuation
$Stop[] = '(';
$Stop[] = ')';
$Stop[] = '[';
$Stop[] = ']';
$Stop[] = '{';
$Stop[] = '}';
$Stop[] = '&';
$Stop[] = '.';
$Stop[] = ';';
$Stop[] = ':';
$Stop[] = ',';
$Stop[] = '!';
$Stop[] = '?';
$Stop[] = '<';
$Stop[] = '>';
# Math
$Stop[] = '+';
$Stop[] = '-';
$Stop[] = '*';
$Stop[] = '/';
$Stop[] = '°';
$Stop[] = '%';
$Stop[] = 'µ';
$Stop[] = '§';
# Diver
$Stop[] = '_';
$Stop[] = '#';
$Stop[] = '~';
$Stop[] = '|';
$Stop[] = '^';
$Stop[] = '@';
$Stop[] = '¨';
$Stop[] = '$';
$Stop[] = '€';
$Stop[] = '£';
$Str = str_replace($Stop, ' ', $Str);
# Remplacement espace multiple
return ereg_replace(' +', '-', trim($Str));
}
-

rudddy - WRInaute accro

- Messages: 2570
- Inscription: 1 Aoû 2007
quand même je vous donne ma fonction :
enfin je suis conscient que c'est pas optimisé du tout ... car ça ne gère pas du tout les caractères spéciaux
- Code: Tout sélectionner
//////////////////////////////////////////////////
// CREER LE LIEN POUR URL REWRITING //
/////////////////////////////////////////////////
function replace_char($theString){
$theString = stripslashes(strtolower($theString));
// Remplacement des a accentues.
$a_accent = "[à|â|À|Â";
$a_accent .= "|À|Á|Â|Ã|Ä|Å|Æ|à|á|â|ã|ä|å|æ]";
$theString = preg_replace($a_accent,"a",$theString);
//remplacement des cedilles
$c_cedille = "[ç|Ç|ç]";
$theString = preg_replace($c_cedille,"c",$theString);
//remplacement des e accentues
$e_accent = "[é|è|ë|ê|É|È|";
$e_accent .= "Ë|Ê|È|Ê|Ë|É|è|é|ê|ë]";
$theString = preg_replace($e_accent,"e",$theString);
//remplacement des i accentues
$i_accent = "[ï|î|Ï|Î|Ì|Í|Î|Ï|ì|í|î|ï]";
$theString = preg_replace($i_accent,"i",$theString);
//remplacement des o accentues
$o_accent = "[ô|Ô|Ò|Ó|Ô|Õ|Ö|ö|õ|ô|ó|ò|ð|Ø|ø]";
$theString = preg_replace($o_accent,"o",$theString);
//remplacement des u accentues
$u_accent = "[ù|û|Ù|Û|Ù|Ú|Û|Ü|ü|û|ú|ù]";
$theString = preg_replace($u_accent,"u",$theString);
//remplacement des espaces
$any_space = "[ |/]";
$theString = preg_replace($any_space,"-",$theString);
//remplacement des quote
$any_quote = "[\?|'|\"]";
$theString = preg_replace($any_quote,"-",$theString);
/
/remplacement des paranthèses
$any_quote = "[\(|\)]";
$theString = preg_replace($any_quote,"-",$theString);
//remplacement des plus
$any_quote = "[\+]";
$theString = preg_replace($any_quote,"-",$theString);
//remplacement des double tirets
$any_quote = "[-----|----|---|--]";
$theString = preg_replace($any_quote,"-",$theString);
return ($theString);
}
enfin je suis conscient que c'est pas optimisé du tout ... car ça ne gère pas du tout les caractères spéciaux
-

rudddy - WRInaute accro

- Messages: 2570
- Inscription: 1 Aoû 2007
darkjukka a écrit:Celle où tu sens le meilleur feeling ? ^^
Au début j'en avais une autre différente dans le genre de la première postée mais je ne la trouvais vraiment pas "propre" (va savoir pourquoi). Puis je suis tombé sur celle-ci et elle m'a plus en m'offrant des choses encore mieux que l'autre (les - au lieu des _, la suppression des espace a la fin du titre quand y'avait " !") donc je l'ai adopté et puis le fait que ce soit celle utilisée par phpbbSEO pour ses mods de rewrite, cela m'a donné confiance.
salut,
juste une question : est-ce que ta méthode gère les caractères spéciaux suivants (ou autres) :
# Math
$Stop[] = '+';
$Stop[] = '-';
$Stop[] = '*';
$Stop[] = '/';
$Stop[] = '°';
$Stop[] = '%';
$Stop[] = 'µ';
$Stop[] = '§';
# Diver
$Stop[] = '_';
$Stop[] = '#';
$Stop[] = '~';
$Stop[] = '|';
$Stop[] = '^';
$Stop[] = '@';
$Stop[] = '¨';
$Stop[] = '$';
$Stop[] = '€';
$Stop[] = '£';
???
- darkjukka
- WRInaute impliqué

- Messages: 669
- Inscription: 28 Avr 2007
La chaine :
Mais honnêtement, tu pense avoir ce genre de caractères dans un titre ou une url ?
- Code: Tout sélectionner
+-*/°%µ§_#~|^@¨$€£
- Code: Tout sélectionner
deg-micro-sect-uml-pound
Mais honnêtement, tu pense avoir ce genre de caractères dans un titre ou une url ?
-

spout - WRInaute accro

- Messages: 4378
- Inscription: 14 Mai 2003
J'ai fais des test sur une cinquantaine de titres de ma BDD (petites annonces)
Je viens de tester la fonction de darkjukka, c'est la plus courte
Mais un titre comme celui ci:
Informatique & Internet
deviens:
informatique-amp-internet
Avec la fonction de rudddy une phrase qui termine par ")" contient un tiret en trop à la fin.
Au final je teste la fonction de Bool, et c'est celle qui à l'air de mieux fonctionner. (je rajouterais juste un strtolower() en plus)
Je viens de tester la fonction de darkjukka, c'est la plus courte
Mais un titre comme celui ci:
Informatique & Internet
deviens:
informatique-amp-internet
Avec la fonction de rudddy une phrase qui termine par ")" contient un tiret en trop à la fin.
Au final je teste la fonction de Bool, et c'est celle qui à l'air de mieux fonctionner. (je rajouterais juste un strtolower() en plus)
-

rudddy - WRInaute accro

- Messages: 2570
- Inscription: 1 Aoû 2007
spout a écrit:J'ai fais des test sur une cinquantaine de titres de ma BDD (petites annonces)
Je viens de tester la fonction de darkjukka, c'est la plus courte
Mais un titre comme celui ci:
Informatique & Internet
deviens:
informatique-amp-internet
pourquoi ne pas modifier si le seul problème est le & ???
spout a écrit:Avec la fonction de rudddy une phrase qui termine par ")" contient un tiret en trop à la fin.
exact c'est un de mes soucis principaux : comment y remédier ?
spout a écrit:Au final je teste la fonction de Bool, et c'est celle qui à l'air de mieux fonctionner. (je rajouterais juste un strtolower() en plus)
donc le vainqueur est ?
23 messages
• Page 1 sur 2 • 1, 2
Lectures recommandées sur ce thème :
- URL SEO friendly et codage de caractères (PHP)
- Widget SEO friendly
- liens SEO friendly
- liens d'affiliation SEO friendly
- Magento - Bilan : SEO friendly ou pas ?
- remplacer un marquee par quelque chose de seo friendly
- Blog seo : quel script Php choisir ?
- Script php pour créer un blog facilement
- script php pour créer un service de compteurs
- Gestion de la page par défaut, multingue, url Rewriting, url friendly
Consultez la description détaillée des produits ou services de Google suivants : Google goo.gl
- Calcul du nombre de backlinks
Cet outil vous permet d'analyser en détails la "popularité" de votre site sur Google. En plus du nombre de liens pris en compte par Google, il calcule le pourcentage de liens internes parmi tous les liens, et il affiche les premières URL trouvées.
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités

