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 :

Suppression d'accents


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 68
    Par défaut Suppression d'accents
    Bonjour à tous !

    Je récupère dans ma base de données un liste de saisons ("58 Eté 2013", "59 Hiver 2013").
    J'aimerais supprimer les accents. C'est à dire remplacer à par a, é par e, etc...

    J'ai testé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function stripAccents($string){
    return strtr($string,
    'àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ',
    'aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY');
    }
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function stripAccents($string){
    $accent = array("à","á","â","ã","ä","ç","è","é","ê","ë","ì","í","î","ï","ñ","ò","ó","ô","õ","ö","ù","ú","û","ü","ý","ÿ","À","Á","Â","Ã","Ä","Ç","È","É","Ê","Ë","Ì","Í","Î","Ï","Ñ","Ò","Ó","Ô","Õ","Ö","Ù","Ú","Û","Ü","Ý");
    $sansAccent = array("a","a","a","a","a","c","e","e","e","e","i","i","i","i","n","o","o","o","o","o","u","u","u","u","y","y","A","A","A","A","A","C","E","E","E","E","I","I","I","I","N","O","O","O","O","O","U","U","U","U","Y");
    return str_replace($accent, $sansAccent, $string);
    }
    Mais aucunes de ces fonction ne marche

    J'ai à chaque fois mes é et mes à.....

    D'ou cela peut-il bien venir ?

    Merci de votre aide !

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

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

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Si ton système le supporte autant utiliser iconv qui fait cela très bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sans_accent = iconv('UTF-8', 'ASCII//TRANSLIT', $string);
    Et pour ton problème c'est sans doute un souçis d'encodage des chaines à traiter
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 68
    Par défaut
    Re-bonjour,

    Merci de ta réponse.

    Alors Iconv ne fonction pas avec les "Eté" qui sortent de ma base.
    J'ai mis mon charset en utf-8 (il était en iso-8859-1 avant), et les "é" s'affichent avec un point d'interrogation blanc sur un losange noir. (�)
    Je ne peut absolument pas toucher à la base, j'ai seulement droit a des select.

    Mon problème peut-il être réglé ?

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Le losange noir signifie que tu affiches de l'ANSI dans une page UTF8.

    Pour str_replace() il ne fonctionnera pas sur une chaîne UTF8.

    L'expression de Comode doit fonctionner mais il faudra peut être le modifieur "u" pour l'UNICODE.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $search = array ('@[éèêëÊË]@i','@[àâäÂÄ]@i','@[îïÎÏ]@i','@[ûùüÛÜ]@i','@[ôöÔÖ]@i','@[ç]@i','@[ ]@i','@[^a-zA-Z0-9_]@u');
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 68
    Par défaut
    Bon alors la fonction ne fonctionne pas.

    Et non ce n'est pas moi qui ai inséré dans la table.

    Je vais vous noter tous les codes concernés :

    Fonction qui récupère dans la table :
    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
    function getSaisons(){
     
    	global $connect;
     
    	$liste[0] = "";
    	$requete = "select codesaison as code, libsaison as lib
    				from saisons
    				where datedebutsaison > sysdate - 1825
    				and saisonpermanente = 0
    				or codesaison = 9
    				order by datedebutsaison desc";
     
    	$reponse = $connect->query($requete);
     
    	$i = 0;
    	while($res = $reponse->fetch(PDO::FETCH_BOTH)){
    		$liste[$i] = $res[0]." ".$res[1];
    		$i++;
    	}
     
    	$reponse->closeCursor();
     
    	return $liste;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $saisons = getSaisons();
    et l'affichage de la liste déroulante :
    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
    echo "Saisons : ";
    		echo "<form method='POST'>";
    		echo "<select name='saison'>";
    		$selected = "";
    		foreach($saisons as $saison){
    			$valeur = propre($saison);
    			if(isset($_SESSION['saison']) and $_SESSION['saison'] == $valeur)
    				$selected = "selected='selected'";
    			else
    				$selected = "";
    			echo "<option ".$selected.">".$valeur."</option>";
    		}
    		echo "</select>";
    		echo " <input type='submit' value='OK' name='OKR'>";
    		echo "</form>";
    L'entete de mon fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 5.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
        <head>
            <title>Portefeuille de commandes</title>
            <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
            <link href="vue/accueil/style.css" rel="stylesheet" type="text/css" />
    		<script type="text/javascript" src="vue/accueil/calendrier.js"></script>
        </head>
    Au lieu de "Eté 2013" il n'affiche rien, juste une ligne blanche.
    Au lieu de "Hiver 2013" il affiche "Hiver_2013".

    Je dois avouer que je suis un peu perdu avec tout ça :s

  6. #6
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Pour str_replace() il ne fonctionnera pas sur une chaîne UTF8.
    C'est inexact, str_replace() est notée comme "binary safe" et fonctionnera normalement sur les chaines utf-8 à la condition expresse que tous les paramètres soient parfaitement encodés utf-8.
    C'est la raison pour laquelle il n'y a pas de fonction mb_str_replace().

    Un peu de lecture par ici

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Par défaut
    Bizar, ton code devrait marcher... Peut être ne nous montres-tu pas l'endroit qui pose problème dans ton code.

    Pour voir, essayes cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function propre($in)
    {
            $in = preg_replace("#\[.*\]#iU", "", $in);
    	$search = array ('@[éèêëÊË]@i','@[àâäÂÄ]@i','@[îïÎÏ]@i','@[ûùüÛÜ]@i','@[ôöÔÖ]@i','@[ç]@i','@[ ]@i','@[^a-zA-Z0-9_]@');
    	$replace = array ('e','a','i','u','o','c','_','');
    	return preg_replace($search, $replace, $in);
    }
    Edit : tu as répondu pendant que j'écrivais. Les ? dans le losange, c'est caractéristique des problèmes d'encodage. Est-ce toi qui enregistre dans la base de données ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Suppression d'accents en UTF-8
    Par navis84 dans le forum Langage
    Réponses: 17
    Dernier message: 22/05/2023, 23h36
  2. [PHP 5.2] Suppression des accents
    Par lelectronique.com dans le forum Langage
    Réponses: 2
    Dernier message: 10/02/2009, 23h04
  3. suppression des accents dans un fichier sous csh
    Par zpipol dans le forum Shell et commandes GNU
    Réponses: 0
    Dernier message: 29/10/2008, 23h58
  4. Suppression des Accents
    Par Tanelorn dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 03/12/2007, 02h01
  5. Suppression des accents et mise en Majuscules
    Par mlzim dans le forum Contribuez
    Réponses: 4
    Dernier message: 07/11/2007, 13h07

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