Services : Blog Forum Flux
Formation Trafic : Référencement Liens sponsorisés Affiliation Ecommerce Nom de domaine E-réputation Marketing Mobile Black Hat Outils Referencement
Formation Technique : Performance Web Html Css Sql Curl Asp Dotnet Php Ajax Wordpress Twitter Google Analytics PrestaShop

Forum Oseox
Oseox

Script caractères mal encodés en base de donnée UTF-8 / ISO

Forum Référencement et Trafic
Nous sommes le Mar 23 Oct 2018 00:40

Heures au format UTC [ Heure d’été ]




Poster un nouveau sujet Répondre au sujet
Auteur Message
MessagePosté: Ven 17 Avr 2009 11:26 
Administrateur
Avatar de l’utilisateur
Bonjour,

Dans une base de données mysql j'ai de nombreux caractères mal encodés, du style é et compagnie.

Est ce que quelqu'un aurait un script sous la main pour les remplacer avec les bons caractères accentués ?

Ou alors une table de correspondance (é => é) pour que je fasse de beaux str_replace :)

J'avais déjà trouvé ce genre de script mais je n'arrive plus à remettre la main dessus :(
D'avance merci,


Haut
 Profil Envoyer un e-mail  
 
MessagePosté: Ven 17 Avr 2009 11:58 
Professionnel
Professionnel
Avatar de l’utilisateur
Une bonne solution consiste à faire ça à coup de copier/coller dans notepad++ (qui permet de gérer les encodages) si la taille de ta base est raisonnable bien sur, mais il y a quand même de la place dans le presse papier :)


Haut
 Profil Envoyer un e-mail  
 
MessagePosté: Ven 17 Avr 2009 22:27 
Administrateur
Avatar de l’utilisateur
Merci pour ta suggestion Stephane.

Je viens de trouver une solution plus automatisée :)

Un simple utf8_decode marche à merveille.
Ma base est propre maintenant, je vais pouvoir avancer.


Haut
 Profil Envoyer un e-mail  
 
MessagePosté: Sam 2 Mai 2009 14:06 
Administrateur
Avatar de l’utilisateur
J'ajoute à ce topic une petite table bien pratique :
Code:
é = é = é

è = è = è

à = à = à

ï = ï = ï

ô = ô = ô

ç = ç = ç

ê = ê = ê

ù = ù = ù

æ = æ = æ

œ = œ = œ

ë = ë = ë

ü = ü = ü

â = â = â

€ = € = €

© = © = ©

¤ = ¤ = ¤


Et une fonction pour supprimer des accents :

Code:
$str = strtr($str, 'ÁÀÂÄÃÅÇÉÈÊËÍÏÎÌÑÓÒÔÖÕÚÙÛÜÝ', 'AAAAAACEEEEEIIIINOOOOOUUUUY');
$str = strtr($str, 'áàâäãåçéèêëíìîïñóòôöõúùûüýÿ', 'aaaaaaceeeeiiiinooooouuuuyy');


Haut
 Profil Envoyer un e-mail  
 
MessagePosté: Sam 2 Mai 2009 14:22 
Administrateur
Avatar de l’utilisateur
et une fonction :

Code:
function modifTexte($texte){
$texte=str_replace("%u0153","oe",$texte);
$texte=str_replace("é","é",$texte);
$texte=str_replace("è","è",$texte);
$texte=str_replace("Ã","à",$texte);
$texte=str_replace("ï","ï",$texte);
$texte=str_replace("ô","ô",$texte);
$texte=str_replace("ç","ç",$texte);
$texte=str_replace("ê","ê",$texte);
$texte=str_replace("ù","ù",$texte);
$texte=str_replace("Å?","oe",$texte);
$texte=str_replace("ë","ë",$texte);
$texte=str_replace("ü","ü",$texte);
$texte=str_replace("â","â",$texte);
$texte=str_replace("â?¬","€",$texte);
$texte=str_replace("©","©",$texte);
$texte=str_replace("%u0153","oe",$texte);
$texte=str_replace("à","à",$texte);
$texte=trim($texte);
return $texte;
}


Haut
 Profil Envoyer un e-mail  
 
MessagePosté: Sam 2 Mai 2009 21:31 
Bonjour,


Il faut savoir que 'str_replace' accepte des tableaux comme arguments.
En lieu et place d'une liste interminable de str_replace, il est plus facile de procéder ainsi :
Code:
function modifTexte($texte){
$str = array("%u0153","é","è","Ã");
$rep = array("oe","é","è","à");
$texte=str_replace($str, $rep, ,$texte);
...
}

Cependant, le plus facile est de remplacer $texte par utf8_decode($texte);
Si ca ne marche pas, alors essayer utf8_decode(utf8_decode($texte));
Si le résultat est désastreux, alors tester htmlentities($texte);
En général, on a déjà fait le tour du problème :)

A savoir qu'une page encodée en UTF8 retourne des données en UTF8, et donc si l'on ne décode pas ces caractères, on se retrouve avec de l'UTF8 dans la base.
La solution consiste alors, avant de l'insérer dans la base, à le reconvertir.
Pour cela, le plus simple est de procéder ainsi :
Code:
$q = " insert into test  values ('".utf8_decode($texte)."') ";


(et pour finir )
Pour convertir d'un coup l'utf8 en caractères html, il est possible de demander à 'htmlentities' de le faire. Ca donne ceci :
Code:
htmlentities($_POST['nom'], ENT_QUOTES, 'UTF-8')


Personnellement, dans mes projets, j'utilises invariablement la même fonction pour convertir toutes les urls en 'jolies listes de mots clés', avec cette fonction :
Code:
function seo_str($st){
   $st = str_replace(array("’",".","'","?","/","(",")","'",":",'"','«' ,'!' ),array(" "," "," "," "," "," "," "," "," "," "," "," "),strtolower($st));
   $st = html_entity_decode(trim($st), ENT_QUOTES);
   $st = strtr($st, ",'.ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ ", "---aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn-");

   $st =  str_replace(array('---','--',' ',), array('-','-','-'), $st);
   return $st;
   }

Nico.


Haut
 Profil Envoyer un e-mail  
 
MessagePosté: Lun 4 Mai 2009 11:07 
Administrateur
Avatar de l’utilisateur
Merci pour ce complément très utile.


Haut
 Profil Envoyer un e-mail  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 7 messages ] 

Heures au format UTC [ Heure d’été ]


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Rechercher:
Aller à:  
cron
Abonnez-vous au flux RSS

Blog

Copyright : Moteur, traduction et optimisation
Merci de votre visite sur le forum Oseox