Quand on s’amuse avec de la réécriture d’URL pour le référencement on est très souvent confrontés à des problèmes liés aux caractères spéciaux, aux espaces ou autres caractères qu’on ne peut pas se permettre de faire passer dans une URL. Une fonction pour remplacer proprement les caractères spéciaux, espaces et autres peut même faire gagner pas mal de temps.
Il y a de ça 4 ans, j’avais codé une fonction pour réécrire les chaines proprement. Passé tout ce temps, je m’aperçois que je m’en sers toujours très souvent. En fait, je me prend pas la tête, j’inclue la fonction et je l’applique sur la chaine qui m’intéresse.
<?php
function no_special_character_v2($chaine){
// les accents
$chaine=trim($chaine);
$chaine= strtr($chaine,"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ","aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn");
// les caracètres spéciaux (aures que lettres et chiffres en fait)
$chaine = preg_replace('/([^.a-z0-9]+)/i', '-', $chaine);
$chaine = strtolower($chaine);
return $chaine;
}
?>
Et pour l’appliquer, rien de bien sorcier, il suffit de faire ça :
<?php
echo no_special_character_v2('Ma chaine Bizarroïde : ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ');
?>
Ce qui donnera ça :
ma-chaine-bizarroide-aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn.
Simple mais efficace.
Salut denis,
sympa le site, quand je lis les divers billets, j’ai l’impression
de les avoir écrits tant les problèmes que tu abordes (avec les serveurs),
sont des problèmes bien connus pour moi !
Et ce code …. il me dit quelques chose …
en tout cas je suis content de voir que maintenant tu as du temps pour parfaire ta tachnique, qui, aux vues des bouts de code que tu craches me paraît de plus en plus propre !
Bonne continuation.
Salut Quentin
Merci pour le commentaire, ça fait plaisir de te lire depuis le temps (vu qu’on est tous les deux blindés de travail, c’est pas toujours simple).
Ouep, les serveurs, je suis en plein dedans depuis quelques temps et donc, j’ai tous les problèmes qui vont avec. ^^
J’ai pas vraiment le temps de parfaire ma technique mais vu que je suis en prod quasiment tout le temps c’est clair que je fais en sorte de coder de plus en plus propre (après, on fait comme on peut ^^). J’ai toute une floppée de projets en cours, dingue, on croirait pas comme ça vu de loin, mais c’est dingue tout le backoffice qu’il faut mettre en place pour une franchise nationnale en crédit immobilier, donc forcément ça aide.
Merci pour les compliments
ça fait plaisir de lire des choses pareil, je suis content de voir que ça a fini par payer !
je n’ai pas eu l’occas de lire ton code depuis un moment, mais les petits bouts que j’en ai vu
me paraissent bien sympas (en fait j’aurais pu l’écrire … et j’ai comme l’impression que l’élève va bientôt dépasser le maître, enfin maître …. si je peux me permettre …)
tu vois de notre côté on a pas mal avancé, on est de plus en plus spécialisé dans le logiciel métier, CRM / ERP etc … on est en train de doucement migrer vers l’AS3, en tout cas pour les nouveaux proj, un nouveau site en perspective etc .etc … enfin on blablatera si tu passes !
++
et au fait, ce ne sont pas des compliments, mais des remarques ! positives soit, mais des remarques !
Bravo pour le blog qui comporte pas mal de code évitant trop de complication. Ce billet sur le remplacement de caractères spéciaux est très bien, mais n’est pas compatible avec les caractères utf8. Y a-t-il un moyen d’en faire une version compatible ?
Bonjour,
Personnellement, je m’en sers sur des codes utilisant un charset en UTF-8 ou en ISO-8859-15.
La plupart du temps, un simple utf8_decode() appliqué avant la fonction suffit. On peut aussi utiliser iconv qui est plus puissant mais plus lourd d’utilisation : http://fr.php.net/manual/fr/function.iconv.php
Après, ça dépend aussi de l’encodage du fichier lui même, par exemple, quand je crée un fichier depuis mon ubuntu il est encodé en UTF-8 alors que quand je le crée depuis mon bon vieux Dreamweaver CS4 sur Windows XP le fichier est encodé en ISO-8859-15
A terme, perso, je vais tout passer en UTF-8, que ça soit les fichiers et leurs contenus. La gestion de multiples charset c’est super lourd et ne cause que des problèmes.
Hey ! Merci pour la fonction
Une variante pour ceux et celles qui rencontrent des soucis d’encodage :
//les caracteres a supprimer lors de la réecriture
function no_special_character_v2($chaine){
//accents
$a = ‘ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ’;
$b = ‘aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr’;
$chaine = utf8_decode($chaine);
$chaine = strtr($chaine, utf8_decode($a), $b);
//decoupage
$chaine = explode(‘ ‘,$chaine);
$chaine = join(‘-’,$chaine);
//minuscule
$chaine = strtolower($chaine);
return utf8_encode($chaine);
}