Bonjour,

Sur mon site je rends mes URLs sexy pour permettre la réécriture d'url seulement je suis confronté à un problème : prenons par exemple ce titre Une nuit, un réveil, Menphus, je fait 2 choses dessus :

  • Virer tout les accents du titre
  • Puis changer les caractères (espace, underscore, trait d'union, slashe,...) en traits d'union (-)
Mon code
<?php

$enc_title = strtr($title, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
                           'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$enc_title = preg_replace('/([^.a-zA-Z0-9]+)/i', '-', $enc_title);

?>

Suite à mon traitement sa me retourne : Une-nuit-un-ry-veil-Menphus mais je n'ai aucune idée du pourquoi du comment !

Alors si vous avez une idée... Merci d'avance !

2 réponses


G1.3
Réponse acceptée

Salut

Presque bon, juste lorsque tu renseigne la liste des caractères et ton titre, tu es encodé en utf8 (sûrement), il faut d'abord le décoder:

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

Normalement ça devrait fonctionner ;)

PS: Si c'est pour une URL, retire les majuscules ;)

Salut,

Si tu veux rendre sexy tes url met des string xD. (ok je sors -->[])

Plus sérieusement tu as cette classe qui semble appropriée pour avoir un tout en un : https://github.com/cocur/slugify ou si ça te fait chier d'ajouter une class pour ça t'as cette function :

static public function slugify($text)
{
  // replace non letter or digits by -
  $text = preg_replace('~[^\pL\d]+~u', '-', $text);

  // transliterate
  $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);

  // remove unwanted characters
  $text = preg_replace('~[^-\w]+~', '', $text);

  // trim
  $text = trim($text, '-');

  // remove duplicate -
  $text = preg_replace('~-+~', '-', $text);

  // lowercase
  $text = strtolower($text);

  if (empty($text)) {
    return 'n-a';
  }

  return $text;
}