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 preg_replace et accents


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 89
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 33
    Points : 23
    Points
    23
    Par défaut Fonction preg_replace et accents
    Pour supprimer les accents dans les données d'une base de données j'utilise la fonction trouvée sur internet

    http://www.wikistuce.info/doku.php/p...x_d-une_chaine

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function filter($in) {
    	$search = array ('@[éèêëÊË]@i','@[áãàâäÂÄ]@i','@[ìíiiîïÎÏ]@i','@[úûùüÛÜ]@i','@[òóõôöÔÖ]@i','@[ñÑ]@i','@[ýÿÝ]@i','@[ç]@i','@[ ]@i','@[^a-zA-Z0-9_]@');
    	$replace = array ('e','a','i','u','o','n','y','c','_','');
    	$result = preg_replace($search, $replace, $in);
    	return $result;
    }
    Mais pour $in = Fréville j'obtiens $result = Freeville.(suivi en pas à pas de la fonction avec XDebug et Firefox)
    Savez-vous où est l'erreur ?

  2. #2
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonjour,

    Avec un fichier PHP encodé en ANSI j'obtiens bien "Freville". Avec un fichier encodé en UTF-8 j'obtiens en effet "Freeville". Je crois que cela vient du fait que UTF-8 encode un caractère sur plusieurs octets.

    Une solution serait de modifier l'encodage de tes données dans ta base (utf8 vers ansi ou équivalent).

    Sinon il te faudra probablement utiliser iconv.

  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 727
    Points
    10 727
    Par défaut
    t'as quelle version de PHP ?

  4. #4
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 906
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 906
    Points : 14 828
    Points
    14 828
    Par défaut
    Citation Envoyé par ThomasR Voir le message
    Sinon il te faudra probablement utiliser iconv.
    Ou utiliser le modificateur "u" pour que la chaine soit traitée en UTF-8 :
    http://fr.php.net/manual/fr/referenc....modifiers.php

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 89
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 33
    Points : 23
    Points
    23
    Par défaut Emploi de 1conv
    Citation Envoyé par ThomasR Voir le message
    Bonjour,

    Avec un fichier PHP encodé en ANSI j'obtiens bien "Freville". Avec un fichier encodé en UTF-8 j'obtiens en effet "Freeville". Je crois que cela vient du fait que UTF-8 encode un caractère sur plusieurs octets.

    Une solution serait de modifier l'encodage de tes données dans ta base (utf8 vers ansi ou équivalent).

    Sinon il te faudra probablement utiliser iconv.
    Je travaille avec PHP 5
    Pour autant que je comprenne iconv me parait adapté. Par contre je ne comprends pas bien l'emploi du modificateur u et son écriture.
    Peux-tu m'aider à modifier ma fonction <filter> pour y introduire iconv ?
    P..S. - Mon âge (76 ans) et mes compétences me rendent timide pour écrire et tester sans rien casser !!!!

  6. #6
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonjour @Softdaemon,

    Dans la fonction preg_replace le modificateur est passé après le pattern. Dans tes regex (celles que tu stockes dans le tableau $search) tu as actuellement le modificateur i. Tu peux rajouter le u comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $search = array ('@[éèêëÊË]@iu','@[áãàâäÂÄ]@iu','@[ìíiiîïÎÏ]@iu','@[úûùüÛÜ]@iu','@[òóõôöÔÖ]@iu','@[ñÑ]@iu','@[ýÿÝ]@iu','@[ç]@iu','@[ ]@iu','@[^a-zA-Z0-9_]@iu');

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 89
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 33
    Points : 23
    Points
    23
    Par défaut Merci de tes conseils
    Merci de tes conseils @ThomasR.
    Pour le moment, j'ai au moins pu, en les utilisant, et de manière plus ou moins acrobatique, modifier le contenu de l'ensemble de ma base de données, ce qui me permet d'avancer.
    Cordialement

    Citation Envoyé par ThomasR Voir le message
    Bonjour @Softdaemon,

    Dans la fonction preg_replace le modificateur est passé après le pattern. Dans tes regex (celles que tu stockes dans le tableau $search) tu as actuellement le modificateur i. Tu peux rajouter le u comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $search = array ('@[éèêëÊË]@iu','@[áãàâäÂÄ]@iu','@[ìíiiîïÎÏ]@iu','@[úûùüÛÜ]@iu','@[òóõôöÔÖ]@iu','@[ñÑ]@iu','@[ýÿÝ]@iu','@[ç]@iu','@[ ]@iu','@[^a-zA-Z0-9_]@iu');

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

Discussions similaires

  1. [MySQL] Fonction rechercher et accents
    Par Alesque258 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 07/05/2008, 18h21
  2. [RegEx] problème sur la fonction preg_replace pour formatage
    Par medkyl dans le forum Langage
    Réponses: 4
    Dernier message: 06/02/2008, 18h37
  3. [RegEx] PB délimiteur dans la fonction "preg_replace"
    Par tiliut dans le forum Langage
    Réponses: 3
    Dernier message: 02/08/2007, 17h42
  4. [RegEx] Problème de fonction preg_replace
    Par alexmorel dans le forum Langage
    Réponses: 3
    Dernier message: 25/09/2006, 18h48
  5. Problème fonction preg_replace
    Par alexmorel dans le forum Langage
    Réponses: 2
    Dernier message: 25/09/2006, 09h03

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