URL-Rewriting et caractères spéciaux

Consultez la formation URL Rewriting et sites dynamiques de WebRankInfo / Ranking Metrics

DomZ
WRInaute discret
WRInaute discret
 
Messages: 74
Inscription: 11 Mar 2006

URL-Rewriting et caractères spéciaux

Message le Lun Avr 03, 2006 17:58

bonjour,

Actuellement j'ai déjà de l'url-rewriting mais pas terrible, en effet je génère des liens avec juste un id (exemple: 456456464.html)

je souhaiterais faire de l'url rewriting avec du texte, mais j'aimerais savoir comment alors ne prendre que les caractères pris en charge dans les urls.

enlever ("'\ /*&$#...), pour les accents je sais comment faire.

Merci de votre aide


chantra
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 257
Inscription: 27 Juin 2005

Message le Lun Avr 03, 2006 20:21

un str_replace bien placé :)
str_replace(array('\'','"','#'....),array('','',''...),$mystr)

DomZ
WRInaute discret
WRInaute discret
 
Messages: 74
Inscription: 11 Mar 2006

Message le Lun Avr 03, 2006 20:55

chantra a écrit:un str_replace bien placé :)
str_replace(array('\'','"','#'....),array('','',''...),$mystr)


Certe mais encore faut-il savoir tous les caractères à remplacer ...

Je cherche plutot une méthode qui me garde tous les caractères ascii.

Merci quand meme.


pipologue
WRInaute impliqué
WRInaute impliqué
 
Messages: 592
Inscription: 27 Mai 2004

Message le Lun Avr 03, 2006 20:59

$var = ereg_replace('[^[:alpha:]]','',$var) ;


SuperPJ
WRInaute impliqué
WRInaute impliqué
 
Messages: 513
Inscription: 15 Jan 2005

Message le Lun Avr 03, 2006 23:31

Salut Domz, voici pour toi une fonction qui pourrait faire l'affaire ;)

Code: Tout sélectionner
// Le texte à placer dans l'url
$texte = " l'url va être : \"rewritée\" ";

// L'id correspondant à l'enregistrement (afin que chaque url générée soit unique)
$id = 456456464;

// L'extension du fichier généré par l'url-rewriting
$extension = ".html";

// Le caractère utilisé pour séparer les mots dans l'url
$sep_mots = "-";

// Le nombre maximum de caractères dans l'url rewritée (id non-comprise)
$max_caracteres = 50;

/*___________________________________________________________________________________*/

// Appel de la fonction
echo rewriting( $texte, $id, $extension, $sep_mots, $max_caracteres );

// Résultat affiché
// l-url-va-etre-rewritee-456456464.html

/*___________________________________________________________________________________*/


// La fonction en question
function rewriting( $texte, $id, $extension, $sep_mots, $max_caracteres )
{
   // Définition des caractères accentués
   $car_speciaux = array( 'À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'È', 'É', 'Ê', 'Ë', 'è', 'é', 'ê', 'ë', 'Ì', 'Í', 'Î', 'Ï', 'ì', 'í', 'î', 'ï', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø', 'Ù', 'Ú', 'Û', 'Ü', 'ù', 'ú', 'û', 'ü', 'ß', 'Ç', 'ç', 'Ð', 'ð', 'Ñ', 'ñ', 'Þ', 'þ', 'Ý' );
   // ... et de leurs "équivalents" non-accentués
   $car_normaux  = array( 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'E', 'E', 'E', 'E', 'e', 'e', 'e', 'e', 'I', 'I', 'I', 'I', 'i', 'i', 'i', 'i', 'O', 'O', 'O', 'O', 'O', 'O', 'o', 'o', 'o', 'o', 'o', 'o', 'U', 'U', 'U', 'U', 'u', 'u', 'u', 'u', 'B', 'C', 'c', 'D', 'd', 'N', 'n', 'P', 'p', 'Y' );
   
   // On commence par supprimer les accents
   $texte = str_replace($car_speciaux, $car_normaux, $texte);
   
   // On remplace les caractères non-alphanumériques par le séparateur $sep_mots
   $texte = preg_replace( "/[^A-Za-z0-9]+/", $sep_mots, $texte );
   
   // On supprime le séparateur s'il se trouve en début ou fin de chaîne
   $texte = trim( $texte, $sep_mots );
   
   // On limite la chaine à $max_caracteres caractères (ici 50 caractères)
   $texte = substr( $texte, 0, $max_caracteres );
   
   // On convertit le tout en minuscules
   $texte = strtolower( $texte );
   
   // On ajoute l'id à la fin pour avoir une url unique et on ajoute l'extension (ici .html)
   $texte = "$texte$sep_mots$id$extension";
   
   // On retourne le résultat
   return ( $texte );
};

zimounet
WRInaute passionné
WRInaute passionné
 
Messages: 1796
Inscription: 8 Nov 2004

Message le Mar Avr 04, 2006 0:31

attention avec la fonction de superpj et les entités html, enfin attention aux entités html quand on fais ça, si on gere pas ça foire tout...

de plus superpj, il manque la prise en compte de l'€uro dans ta fonction ;)


SuperPJ
WRInaute impliqué
WRInaute impliqué
 
Messages: 513
Inscription: 15 Jan 2005

Message le Mar Avr 04, 2006 11:03

hmmm ... je n'ai pas compris ta remarque sur les entités html :? en quoi genent-elles dans la mesure ou tous les caractères non alphanumériques (donc les </> des tags html) sont supprimés dans la fonction ? ;)

Code: Tout sélectionner
// On remplace les caractères non-alphanumériques par le séparateur $sep_mots
$texte = preg_replace( "/[^A-Za-z0-9]+/", $sep_mots, $texte );


EDIT : ok j'ai compris tu voulais dire quand on a $texte qui vaut par exemple "<strong>test</strong>" ne pas se retrouver avec un fichier du genre "strong-test-strong-1.html" :P c'est vrai que je n'avais pas pensé à cela car en général on utilise pour le rewriting un texte extrait d'une base, qui n'a pas encore été mis en forme html. Mais c'est vrai qu'il faut penser à ajouter une fonction pour enlever si nécessaire les tags html :P

Bref mettre ça juste avant la suppression des caractères non-alphan ;) :
Code: Tout sélectionner
$texte = strip_tags( $texte );

Bien vu jeune codeur talentueux :D

DomZ
WRInaute discret
WRInaute discret
 
Messages: 74
Inscription: 11 Mar 2006

Message le Mar Avr 04, 2006 17:43

Merci bcp.

En effet les tags ne sont pas un probleme car à l'enregistrement je fais un strip_tags donc pas d'HTML sur ce champ en base.

Merci à vous.

Sinon j'avais fait ces fonctions :

Code: Tout sélectionner
function fctConvertToLink($str) {
   $ret = fctRemoveAccents($str);
   $ret = mb_strtolower($str);
   $ret = str_replace(" ","-",$ret);
   $ret = preg_replace("/-+/","-",$ret);
   $ret = preg_replace("/[^a-z0-9'\"-]/i","",$ret);
   $ret = trim($ret,"-");
   return $ret;
}

function fctRemoveAccents($str = '') {
   if(!(is_string($str))) return '';
   $ret = strtr($str, "ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ", "AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy");
   return $ret;
}


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Formation recommandée sur ce thème :

Formation URL Rewriting et sites dynamiques : apprenez comment mettre en place la réécriture d'URL, comment optimiser vos URL et profiter de vos pages dynamiques pour booster votre référencement. 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 :

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.
  • Transformer des citations en liens
    Cet outil vous permet de trouver des pages citant votre site mais ne faisant pas (encore) de lien. Il suffira parfois d'un simple mail pour transformer cette simple citation en lien (backlink).


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités