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

PHP & Base de données Discussion :

Convertir champs UTF-8


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 10
    Points : 8
    Points
    8
    Par défaut Convertir champs UTF-8
    Bonsoir,

    Bon j'ai un problème qui est facile à résoudre par une méthode pas du tout optimisée ou par une chiante mais si quelqu'un a une méthode plus simple ou moins gourmande je suis preneur.

    J'attaque plusieurs bases de données et certains champs contiennent des accents.

    Quand je fais mes echo, mon affichage sur Firefox est pourri, que je sois en utf8 ou en iso j'ai des ? dans des carrés pour tous les é è ò et autres caractères spéciaux.

    Problème : si je dois reprendre mon code maintenant pour mettre des utf8_encode sur tous mes champs, je vais y passer 8 mois (ceci est la méthode chiante).

    J'ai écrit une libraire ou j'appelle mes mysql/mssql fetch_array/assoc et j'ai essayé de mettre un return utf8_encode(mssql_fetch_array($rs)) (entre autres) mais c'est un tableau donc il ne veut pas.

    Je pourrais remplacer ça par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $toto = mssql_fetch_array($rs);
    $i=0;
    while (isset($toto[$i]))
    {
    $toto[$i]=utf8_encode($toto[$i]);
    $i++;
    }
    return $toto;
    Méthode qui me ferait tout facilement, mais vu le nombre de boucles que je me paie déjà dans tous les sens et le nombre d'enregistrements que j'ai dans mes table, j'ai peur que faire ça me donne des temps de réponses encore plus longs que ce qu'ils sont actuellement (et pourtant, Dieu sait que j'opti tant que je peux : /)

    Bref, si quelqu'un à une méthode mieux foutue, ou encore mieux, connaît un truc très facile à faire qui m'aurait complètement échappé, j'achète !

    Damien.


    PS : j'attaque aussi bien des bases SQL Server que MySQL et je n'ai pas le contrôle sur la base SQL Server

  2. #2
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Il n'y a besoin d'encoder/decoder que si on choisi volontairement de conserver des elements travaillant dans des encodages differents.
    Ca a été mon cas par exemple quand j'ai voulu faire des connexions avec une base SQL Server configurée en ANSI avec un de mes projets entièrement prévu pour de l'UTF8.

    Il faut donc commencer par choisir un encodage.

    Avec mysql, on peut facilement définir l'encodage de communication avec PHP.
    Avec SQL server, je n'ai pas trouvé de methode pour le faire, donc pour moi on est dependant de la configuration du serveur.

    Tu peux donc choisir de tout caler sur SQL server ou bien de conserver un element different en sachant alors qu'il devrait etre converti en entrée et en sortie.

    Une fois que tu as choisi ton encodage, il faut t'assurer que
    - tes fichiers PHP sont bien tous écris dans cet encodage.
    - ton code HTML indique bien cet encodage en tête
    - la communication vers mysql se fait pas bien dans cet encodage (voir SET NAMES) et que l'interclassement des tables soit du bon type.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Le problème est que je n'ai pas la possibilité d'imposer à mes bases leurs codages.

    J'ai donc fait cette solution :

    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
     
    $retour= null;
    		if($this->type=="mssql") // SQL Server
    		{
    			$retour = mssql_fetch_assoc($rs);
    		}
    		else
    		{
    			if($this->type=="mysql") // MySQL
    			{
    				$retour = mysql_fetch_assoc($rs);
    			}
    		}
     
    		die(var_dump($retour));
     
    		$retour_keys = array_keys($retour);
    		$retour_values = array_values($retour);
    		for($i=0; $i<count($retour); $i++)
    		{
    			$retour[$retour_keys[$i]] = utf8_encode($retour_values[$i]);
    		}
    Problème : Warning: array_keys() [function.array-keys]: The first argument should be an array in blabla

    Donc mes fetch_assoc ne me rendent pas des array.

    Une solution? xD

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    Le problème est que je n'ai pas la possibilité d'imposer à mes bases leurs codages.
    Tu n'as pas bien lu ce que j'ai écris, tu peux définir l'encodage de communication avec mysql pour une connexion PHP unique.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Ouais mais je ne peux pas l'imposer à mes SQL Server alors que je peux attaquer plusieurs bases SQL Servers qui n'ont pas forcément le même encodage.

  6. #6
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Attention utf8_encode converti de l'iso vers l'UTF8 mais si ta chaine est déjà en UTF8, elle sera "surconvertie".
    Tu ne peux pas utiliser la fonction aveuglement sans savoir dans quel encodage sont actuellement tes caractères.
    Personnellement j'ai déjà essayé de détecter l'encodage d'une chaine pour voir justement si je devais convertir ou non et c'etait très peu fiable et j'ai été obligé d'écrire explicitiquement si je convertissais pour tel source et non pour tel autre.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Effectivement je n'avais pas pensé à ça...

    Bon, bon, bon...

  8. #8
    Invité
    Invité(e)
    Par défaut
    J'ai également le même problème (comme beaucoup comme j'ai remarqué) d'encodage entre SQL Server et Php. Il m'affiche moi aussi des ? dans un losange pour les é,à,ê, ...

    J'essaye de chercher partout l'équivalent de "SET NAMES UTF8" pour MySql, mais sur SQL Server, mais pas moyen de trouver.

    Si c'est possible d'avoir une petite aide là-dessus, ce serait vraiment génial. :p

    Sinon, en lisant ce topic, vous parliez de définir l'interclassement des tables sous SQL Server ? Comment fait t'on ça ?

    Harry Potter

  9. #9
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Heu non je parlais d'interclassement de mysql.

    Si c'est possible d'avoir une petite aide là-dessus, ce serait vraiment génial.
    Les réponses sont déjà donnés dans ce sujet non ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Invité
    Invité(e)
    Par défaut
    Ah oui, c'est peut-être ce que tu dis ici :

    ...SQL Server configurée en ANSI avec un de mes projets entièrement prévu pour de l'UTF8.

    Il faut donc commencer par choisir un encodage.
    Il faut donc changer l'encodage de SQL Server ?

    Sinon tu parlais de la fonction utf8_encode.

Discussions similaires

  1. Convertir en UTF-8
    Par kenji33 dans le forum Langage
    Réponses: 12
    Dernier message: 08/09/2011, 17h22
  2. Réponses: 1
    Dernier message: 06/03/2009, 14h58
  3. commande shell pour convertir en utf-8
    Par gtraxx dans le forum Windows XP
    Réponses: 0
    Dernier message: 12/01/2009, 12h13
  4. [MySQL] Encodage champs UTF-8
    Par Mercenary Developer dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 05/03/2008, 15h40
  5. convertir l'UTF-8 et l'UTF-16 en caracteres
    Par ielbenna dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 11/10/2006, 14h42

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