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 :

formater et nettoyer une chaine de caractère


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut formater et nettoyer une chaine de caractère
    Bonjour a tous,

    j'ai une fonction qui permet de remplacer les accents et enlever les caractères spéciaux d'une chaine de caractère. Elle fonctionne a merveille, sauf que ça bug lorsqu'il y a cet apostrophe ’ au lieu de ', il me le remplace par la lettre 'r' au lieu de '-'. sauriez vous pour quelle raison et comment résoudre ce problème??
    j'ai rajouté cet apostrophe dans la liste des caractères a remplacer par '-' (ligne 5) mais ça ne marche pas

    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
    function clean_string($string) {
    	$string = strtolower(trim($string));
     
    	// escape first the unescaped elements by mb_convert_encoding ('\'', '"', and '&')
    	$string = preg_replace("#[ ,.;:'%&()\-\"]+#", "-", $string);
    	$string = mb_convert_encoding($string, 'HTML-ENTITIES', 'UTF-8');
     
    	// replace accents
    	$string = preg_replace(array('/ß/', '/&(..)lig;/', '/&([aouAOU])uml;/', '/&(.)[^;]*;/'), array('ss', "$1", "$1".'e', "$1"), $string);
     
    	// replace all special characters except '-'
    	$string = preg_replace("/[^a-z0-9-]/i", '-', $string);
     
    	return $string;
    }
    Merci par avance

  2. #2
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 490
    Points : 294
    Points
    294
    Par défaut
    Est ce que cela te conviendrai ?
    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
     
    <?php
    function filter($texte, $charset='utf-8') {
        $texte = htmlentities($texte, ENT_NOQUOTES, $charset);
        $texte = trim($texte);
        $texte = preg_replace('#&([A-za-z])(?:acute|cedil|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $texte); // Enlève les accents
        $texte = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $texte); // pour les ligatures (le e dans le o)
        $texte = preg_replace('#&[^;]+;#', '', $texte); // supprime les autres caractères
        $texte = preg_replace( "/[^A-Za-z0-9]+/", "-", $texte ); // On remplace les caracteres non-alphanumériques par le tiret
        $texte = strtolower( $texte ); // On convertit le tout en minuscules
        $texte = trim($texte, '-'); // Supprime les tirets en début ou en fin de chaine
        return $texte;
    }
    echo filter("Répondre à la discussion");
    ?>
    Écoute, sinon ta langue te perdra (proverbe Navajo)

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    à quoi ça sert ?

  4. #4
    Expert confirmé
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Points : 4 853
    Points
    4 853
    Par défaut
    Tu as essayé avec la fonction iconv associé à //TRANSLIT ?
    Développeur | Zend Certified Engineer

    Étapes Pour mieux se servir du forum:
    1. Commencez par lire les cours et tutoriels ;
    2. Faites une recherche;
    3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

    Nix>_Rien n'est plus pratique que la théorie

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Merci pour vos réponses.
    on ne peut pas juste modifier mon code afin de mieux interpréter ce type d'apostrophe???

  6. #6
    Invité
    Invité(e)
    Par défaut
    AS-tu au moins essayer la fonction de elcoyotos ?

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    AS-tu au moins essayer la fonction de elcoyotos ?
    Non pas encore, je le fais très prochainement et vous tiens au courant

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Bonsoir,

    Je viens de tester la fonction de elcoyotos, je t'en remercie. Mais ce fameux apostrophe n'est pas pris en charge:
    test’autre'chaine devient testautre-chaine

    que faire??

  9. #9
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Citation Envoyé par Thes32 Voir le message
    Tu as essayé avec la fonction iconv associé à //TRANSLIT ?
    Les résultat de iconv ne sont pas homogène selon le système (en tout cas j'ai pas réussi) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $str = "testé avec àçè"
    echo iconv('UTF-8','ASCII//TRANSLIT',$str);
    Va afficher
    teste avec ace
    sous linux mais pas sous windows ou macos :
    test'e avec `ac_`e
    .

    Pas terrible du coup.

    Citation Envoyé par stealth35
    à quoi ça sert ?
    J'ai envie de te poser la même question , tout le monde n'a pas une connaissance parfaite du langage , être condescendant n'aidera pas ...
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par grunk Voir le message
    J'ai envie de te poser la même question , tout le monde n'a pas une connaissance parfaite du langage , être condescendant n'aidera pas ...
    Aucun rapport avec tout ça, c'est juste une question de base qui n'a pas été posé.

  11. #11
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    Pour les caractères non reconnu j'utilise généralement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $string = mb_encode_numericentity($string, array (0x80, 0xffff, 0, 0xffff), 'UTF-8');
    Conception / Dev

  12. #12
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    cela dit si c'est juste pour formater une url

    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
      public function stringToUrl($string) {
    		// MAJUSCULE
     
    		$sIn = mb_strtoupper($string , "UTF-8");
    		// SUPPRIME LES ACCENTS
     
                      echo $sIn;
    		$sIn = str_replace(    Array('Â','Ä','À','Ç','È','É','Ê','Ë','ŒÎ','Ï','Ô','Ö','Ù','Û','Ü'),
                                           Array('A','A','A','C','E','E','E','E','I','I','O','O','U','U','U' ),$sIn );
    		// SUPPRIME TOUT CE QUI N'EST PAS UNE LETTRE OU UN TIRRET
    		$sIn = preg_replace('`[^A-Z[:space:]\'0-9-]`', '', $sIn);
    		// REMPLACE LES ESPACE
    		$sIn = preg_replace('`[[:space:]\']{1,}`', '-', trim($sIn));
     
     
    		// SUPPRIME LETTRES REPETES
    		//$sIn = preg_replace( '`(.)\1`', '$1', $sIn );
    		// TEST SUR TIRET EN FIN DE CHAINE
    		//if($sIn{strlen($sIn)-1} == "-" ) $sIn = substr($sIn, 0, strlen($sIn)-1);
    		// MINUSCULE
    		$sIn = strtolower($sIn);
     
    		// SORTIE
    		return $sIn;
    	}
    celle la fonctionne
    Conception / Dev

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/02/2013, 23h52
  2. Analyser une chaine de caractère et la formater
    Par saad.hessane dans le forum C
    Réponses: 10
    Dernier message: 19/07/2008, 17h07
  3. Formater une chaine de caractère
    Par jean-pierreL dans le forum Langage
    Réponses: 3
    Dernier message: 26/12/2007, 14h59
  4. Nettoyer une chaine contenant des caractères spéciaux?
    Par adil_vpb dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 30/05/2007, 15h47
  5. Réponses: 3
    Dernier message: 01/02/2006, 18h26

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