IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Fonction suppression petit mot et suppression caractères spéciaux


Sujet :

Langage PHP

  1. #1
    Invité
    Invité(e)
    Par défaut Fonction suppression petit mot et suppression caractères spéciaux
    Bonjour,
    voila j'essaie de faire un script qui utiliserait le titre d'un article pour en générer une url.
    Pour cela il me faut supprimer les mots inférieur a 4 lettres et remplacer les caractères spéciaux et lettres accentués.
    j'ai donc fait deux fonctions une pour les caractères spéciaux et lettres accentués et une autre fonction pour les petit mots.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    function generation_url($chaine) 
    {
    $char = htmlentities(stripslashes(strtolower($chaine)),ENT_QUOTES) ;
     
     $cherche = array(""", "&", "€", "<", ">", "œ", "Ÿ", " ", "¡", "¢", "£", "¤", 
     "&yen", "¦", "§", "¨", "©", "ª", "«", "¬", "*", "®", "&masr;", "°", "±", "²", 
     "³", "´", "µ", "¶", "·", "¸", "¹", "º", "»", "¼", "½", "¾", 
     "¿", "À", "Á", "Â", "Ã", "Ä", "Å", "&Aelig", "Ç", "È", "É", "Ê", 
     "Ë", "Ì", "Í", "Î", "Ï", "ð", "Ñ", "Ò", "Ó", "Ô", "Õ", "Ö", 
     "×", "Ø", "Ù", "Ú", "Û", "Ü", "Ý", "þ", "ß", "à", "á", "â",
     "ã", "ä", "å", "æ", "ç", "è", "é", "ê", "ë", "ì", "í", "î",
     "ï", "ð", "ñ", "ò", "ó", "ô", "õ", "ö", "÷", "ø", "ù", "ú", 
     "û", "ü", "ý", "ÿ", "þ", " ", ",", ";", ".", ":", "!", "?", "/", "(", ")", "{", "}", "[", "]", "+", "=", "*", 
     "~", "'", "'");
     
    $remplace = array("", "", "", "", "", "oe", "y", "-", "i", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
     "", "", "", "", "", "", "", "", "", "a", "a", "a", "a", "a", "a", "a", "c", "e", "e", "e", "e", "i", "i", "i", "i", "d", "n", "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", "o", "n", 
     "o", "o", "o", "o", "o", "", "", "u", "u", "u", "u", "y", "y", "", "-", "", "-", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", 
     "", "-", "-" );
     
    return str_replace($cherche, $remplace, $char);
    }
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function SupPetitMot($chaine)
    	{
    		return preg_replace('#(?<=\-)\w{1,3}(?=\-)#i', '', $chaine);
    	}
    le pb et que lorsque j'utilise ces fonctions sur la chaine je n'ai pas le résultat souhaité:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    echo SupPetitMot(generation_url('l\'été sera chaud et les filles seront belles.')) . '<br />' ;
    echo generation_url(SupPetitMot('l\'été sera chaud et les filles seront belles.')) . '<br />' ;
    me retourne :
    l--sera-chaud---filles-seront-belles
    l-ete-sera-chaud-et-les-filles-seront-belles

    dans le 1er cas j'ai un l qui traine et plusieurs tirets "-" entre les mots
    dans le 2eme cas j'ai des mots de 3 lettres ou moins alors qu'il aurait du être supprimé.

    pour le coups je sèche.

    merci de votre aide.

  2. #2
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    Ce que tu essayes de faire s'appelle un « slug ».

    Tu peux utiliser
    trim et preg_replace_callback pour y arriver.

    Vu dans la doc de Symfony:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    // code derived from http://php.vrana.cz/vytvoreni-pratelskeho-url.php
    static public function slugify($text)
    {
      // replace non letter or digits by -
      $text = preg_replace('#[^\\pL\d]+#u', '-', $text);
     
      // trim
      $text = trim($text, '-');
     
      // transliterate
      if (function_exists('iconv'))
      {
        $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
      }
     
      // lowercase
      $text = strtolower($text);
     
      // remove unwanted characters
      $text = preg_replace('#[^-\w]+#', '', $text);
     
      if (empty($text))
      {
        return 'n-a';
      }
     
      return $text;
    }

Discussions similaires

  1. [RegEx] Regex deux mots minimum et caractères spéciaux
    Par Shinosha dans le forum Langage
    Réponses: 10
    Dernier message: 04/08/2012, 16h01
  2. json_encode remplace les mot contenant des caractères spéciaux par null
    Par tojosource dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/06/2010, 20h04
  3. [TCPDF] Mots coupés aux caractères spéciaux
    Par taka10 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 01/10/2009, 10h04
  4. Suppression de caractères spéciaux
    Par nellynew dans le forum Access
    Réponses: 3
    Dernier message: 18/09/2006, 10h14
  5. [FLASH MX2004] petit soucis XML et caractères spéciaux
    Par Isses dans le forum Intégration
    Réponses: 20
    Dernier message: 25/04/2006, 13h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo