[Résolu!!] traitement php de la variable a mettre dans l'url

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

Cannibal Kro
Nouveau WRInaute
 
Messages: 4
Inscription: Mar Jan 06, 2009 23:07

[Résolu!!] traitement php de la variable a mettre dans l'url

Message le Mer Jan 14, 2009 19:18

Bonsoir,
J'utilise l'url rewriting pour mon site.
voici ma règle:
RewriteRule ^histoire-([0-9]*)-([-0-9A-Za-z]*)\.php$ /histoire.php?num=$1 [L]

Ainsi je souhaite mettre en première variable l'id d'une histoire, qui servira à la redirection. Je souhaite aussi mettre "pour faire joli" le titre de cette histoire dans l'url (deuxième variable de la règle).

Seulement dans ma page php, comment faut il traiter ma variable $titre pour la transformer en lettres uniquement (avec tirets autorisés)? Pour qu'ainsi je puisse utiliser la variable traitée pour afficher une url correcte? CAD pas de métacaractères, juste du texte minuscule et des tirets...
Dernière édition par Cannibal Kro le Mer Jan 14, 2009 20:13, édité 1 fois.


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 5151
Inscription: Mer Nov 23, 2005 10:38

Message le Mer Jan 14, 2009 19:32

Il te faut mettre en place une fonction PHP qui va te générer une url propre à partir de ton titre. Normalement il y a des exemples qui trainent sur le forum, ou sinon tu peux installer un CMS genre SPIP et regarder comment eux font (je n'ai pas ça sous la main présentement).

Cannibal Kro
Nouveau WRInaute
 
Messages: 4
Inscription: Mar Jan 06, 2009 23:07

Message le Mer Jan 14, 2009 19:49

Code: Tout sélectionner
$titrelien = strtolower($donneespres['titre']);
               $titrelien=str_replace(array('ä', 'ê', 'ë', 'ô', 'î', 'ï', 'ô', 'ö', 'û', 'ü', 'ÿ', '€', '#', '+', '*', ' ', '\'', '"', '²', '&', 'é', '~', '"', '{', '(', '[', '|', 'è', '`', 'ç', '^', 'à', 'à', ')', '}', '=', '}', '^', '$', '£', '¤', 'ù', '%', '*', 'µ', ',', '?', ';', ':', '/', '!', '§', '>', '<'), '-', $titrelien);


Est-ce que cette fonction est assez otpimale/sécurisée?


screuscreu
WRInaute passionné
WRInaute passionné
 
Messages: 924
Inscription: Lun Jan 14, 2008 12:14

Message le Mer Jan 14, 2009 19:50

utilise mon urrlName($titre) ... marche nickel. Je ne connais pas la source et ne suis pas l'auteur mais un utilisateur qui à un peu modifié la chose !

Code: Tout sélectionner
   function enleve_accents ($chaine)
   {
      $reg = '/&(.)(acute|grave|circ|uml|cedil|ring|tilde|slash);/';
      return preg_replace($reg, '\1', htmlentities($chaine));
   }
   
   function suppr_speciaux ($chaine)
   {
      $reg = '|(&[a-zA-Z0-9]*;)|U';
      return preg_replace($reg, '-', $chaine);
   }
   
   function is_utf8 ($string)
   {
      return ! strlen(preg_replace(',[\x09\x0A\x0D\x20-\x7E]' . # ASCII
   '|[\xC2-\xDF][\x80-\xBF]' . # non-overlong 2-byte
   '|\xE0[\xA0-\xBF][\x80-\xBF]' . # excluding overlongs
   '|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}' . # straight 3-byte
   '|\xED[\x80-\x9F][\x80-\xBF]' . # excluding surrogates
   '|\xF0[\x90-\xBF][\x80-\xBF]{2}' . # planes 1-3
   '|[\xF1-\xF3][\x80-\xBF]{3}' . # planes 4-15
   '|\xF4[\x80-\x8F][\x80-\xBF]{2}' . # plane 16
   ',sS', '', $string));
   }
   
   function urlName ($texte)
   {
      if (is_utf8($texte))
         $texte = utf8_decode($texte);
      $texte = strtolower(suppr_speciaux(enleve_accents($texte)));
      $texte = preg_replace("/(l'|d'|t'| et | st | de | un | le | de | du | lui | mon | ton | les | son | sa | ca | je | tu | il | elle | nous | vous | ils | elles | la | ce | de | son | dont | qui | a | une | ne | des | en |t-|-t)/", " ", $texte);
      $reg = '|([^a-z0-9]+)|';
      $texte = preg_replace($reg, '-', $texte);
      return trim($texte, '-');
   }


Tu remarqueras que tu peux enlever des mots parasites dans la function urlName ... si tu veux !


screuscreu
WRInaute passionné
WRInaute passionné
 
Messages: 924
Inscription: Lun Jan 14, 2008 12:14

Message le Mer Jan 14, 2009 19:51

Cannibal Kro a écrit:
Code: Tout sélectionner
$titrelien = strtolower($donneespres['titre']);
               $titrelien=str_replace(array('ä', 'ê', 'ë', 'ô', 'î', 'ï', 'ô', 'ö', 'û', 'ü', 'ÿ', '€', '#', '+', '*', ' ', '\'', '"', '²', '&', 'é', '~', '"', '{', '(', '[', '|', 'è', '`', 'ç', '^', 'à', 'à', ')', '}', '=', '}', '^', '$', '£', '¤', 'ù', '%', '*', 'µ', ',', '?', ';', ':', '/', '!', '§', '>', '<'), '-', $titrelien);


Est-ce que cette fonction est assez otpimale/sécurisée?


Ca devrait plus ou moins marcher, jusqu'au jouroù quelqu'un te mettra des lettres majuscules accentuées (quoi que ça en théorie tu le gère) ou d'autres caractères ... regarde ma solution elle marche a 100%

EDIT : en plus je sais pas ce que fait ta fonction à toi, mais j'ai des doutes sur le résultat en sortie ;)
Compare avec un texte pris au hazard sur un site et tu verras celui que tu veux

Cannibal Kro
Nouveau WRInaute
 
Messages: 4
Inscription: Mar Jan 06, 2009 23:07

Message le Mer Jan 14, 2009 20:04

Okay merci je pense prendre ta solution car comme tu dis ça revient assez souvent sur les plateformes sociales les caractères genre les coeurs, signes chinois etc...


screuscreu
WRInaute passionné
WRInaute passionné
 
Messages: 924
Inscription: Lun Jan 14, 2008 12:14

Message le Mer Jan 14, 2009 20:12

[Résolu] ? (pour éditer ton titre)

Cannibal Kro
Nouveau WRInaute
 
Messages: 4
Inscription: Mar Jan 06, 2009 23:07

Message le Mer Jan 14, 2009 20:13

of course :D merci!


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 :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité