Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/07/2011, 12h06   #1
Invité régulier
 
Inscription : janvier 2009
Messages : 33
Détails du profil
Informations personnelles :
Âge : 76
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2009
Messages : 33
Points : 8
Points : 8
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 :
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 ?
Softdaemon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 13h05   #2
Modérateur
 
Avatar de ThomasR
 
Homme Thomas Rambaud
Développeur Web
Inscription : décembre 2007
Messages : 2 140
Détails du profil
Informations personnelles :
Nom : Homme Thomas Rambaud
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 2 140
Points : 2 885
Points : 2 885
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.
__________________
Développeur Web, accessoirement geek (ou l'inverse)
http://thomasrambaud.com
ThomasR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 13h23   #3
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
t'as quelle version de PHP ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 14h44   #4
Modérateur
 
Avatar de Bisûnûrs
 
Josselin
Développeur Web
Inscription : janvier 2004
Messages : 9 050
Détails du profil
Informations personnelles :
Nom : Josselin
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2004
Messages : 9 050
Points : 12 181
Points : 12 181
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
Bisûnûrs est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/07/2011, 11h23   #5
Invité régulier
 
Inscription : janvier 2009
Messages : 33
Détails du profil
Informations personnelles :
Âge : 76
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2009
Messages : 33
Points : 8
Points : 8
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 !!!!
Softdaemon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/07/2011, 16h13   #6
Modérateur
 
Avatar de ThomasR
 
Homme Thomas Rambaud
Développeur Web
Inscription : décembre 2007
Messages : 2 140
Détails du profil
Informations personnelles :
Nom : Homme Thomas Rambaud
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 2 140
Points : 2 885
Points : 2 885
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 :
$search = array ('@[éèêëÊË]@iu','@[áãàâäÂÄ]@iu','@[ìíiiîïÎÏ]@iu','@[úûùüÛÜ]@iu','@[òóõôöÔÖ]@iu','@[ñÑ]@iu','@[ýÿÝ]@iu','@[ç]@iu','@[ ]@iu','@[^a-zA-Z0-9_]@iu');
__________________
Développeur Web, accessoirement geek (ou l'inverse)
http://thomasrambaud.com
ThomasR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2011, 09h27   #7
Invité régulier
 
Inscription : janvier 2009
Messages : 33
Détails du profil
Informations personnelles :
Âge : 76
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2009
Messages : 33
Points : 8
Points : 8
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 :
$search = array ('@[éèêëÊË]@iu','@[áãàâäÂÄ]@iu','@[ìíiiîïÎÏ]@iu','@[úûùüÛÜ]@iu','@[òóõôöÔÖ]@iu','@[ñÑ]@iu','@[ýÿÝ]@iu','@[ç]@iu','@[ ]@iu','@[^a-zA-Z0-9_]@iu');
Softdaemon est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h03.


 
 
 
 
Partenaires

Hébergement Web