[Script PHP] Fonctions pour créer un slug (SEO friendly URL)
23 messages • Page 1 sur 2 • 1, 2
Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics
[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.
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
- 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é
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.
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));
}
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
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[] = '£';
???
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 ?
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)
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
Formation recommandée sur ce thème :
Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
- Ajouter un Gadget Google sur son site
- Suite de l'article sur le fichier .htaccess : l'URL rewriting
- Optimiser le référencement d'un forum phpBB : réécriture d'URL
- AdSense Tracking : statistiques détaillées sur les clics AdSense
- Les albums web Picasa passent à 1 Go de stockage
- SEO Links (Extension Firefox)
- Easter Egg dans Google Chrome (fonctions cachées)
- Photos satellite des incendies en Grèce dans Google Earth
- Google Desktop pour Mac OS X
- Outil de référencement SEO Playground Tool
Consultez la description détaillée des produits ou services de Google suivants : Google SketchUp
- 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 1 invité






le forum