BDD a caractere bizar ... [Résolu]

Signaler
Messages postés
1423
Date d'inscription
mardi 14 décembre 2004
Statut
Membre
Dernière intervention
29 décembre 2012
-
Messages postés
1423
Date d'inscription
mardi 14 décembre 2004
Statut
Membre
Dernière intervention
29 décembre 2012
-
Bonjour,
Voilà ma bdd contient ce genre de caractere:
é pour é
ê pour ê
et je voulais savoir si il y avait un moyen de transformer tout le contenu de ma bdd via des update en caracteres dit speciaux pour le html soit:
é pour é
etc...

j'avais fait ce script mais qui ne fait pas ca il il ne sait pas definir quel type un champ attend.
Si qqun a une idée ou une proposition, je suis preneur

<?php
$rLink = mysql_connect("localhost", "root", "")or die("Impossible de se connecter : " . mysql_error());
$rListTable = mysql_list_tables("bdd");
$iTables = mysql_num_rows($rListTable);
$sContent='';
for ($i=0;$i<$iTables;$i++) {
    $sTable=mysql_tablename($rListTable,$i);
    $sSql='SELECT * FROM '.$sTable;
    $rSql=mysql_query($sSql);
    $iFields=mysql_num_fields($rSql)-1;
    for($iField=0;$iField<=$iFields;$iField++){
        $sNameField=mysql_field_name($rSql,$iField);
        $aTable[$sTable][]=$sNameField;
    }
    while ($aResult = mysql_fetch_assoc($rSql)) {
        foreach($aTable as $sTable=>$aField){
            foreach($aField as $iField=>$sField){
                $sResult=$aResult[$sField];
                $sResult2=utf8_decode($aResult[$sField]);
                $aFieldValueOrigin[$sField]=$sResult;
                $mPosition=strpos($sResult2,'?');
                if($mPosition===false || $sField=='id'){
                    $aFieldValueChange[$sField]=$sResult2;
                }
            }
        }
        $sSqlUpdate='update '.$sTable.' set';
        $sSqlClause='where';
        foreach($aFieldValueChange as $sField=>$sValue){
            $sSqlUpdate.=' '.$sField."='".utf8_encode($sValue)."',";
            $sSqlClause.=' '.$sField."='".$aFieldValueOrigin[$sField]."' AND";
        }
        $sSqlUpdate=substr($sSqlUpdate,0,strlen($sSqlUpdate)-1);//on vire la virgule
        $sSqlClause=substr($sSqlClause,0,strlen($sSqlClause)-3);//on vire le AND
        $sSqlUpdateEnreg=$sSqlUpdate.$sSqlClause;
        $sContent.=$sSqlUpdateEnreg;
        mysql_query($sContent);
    }
}
mysql_free_result($rListTable);
mysql_close($rLink);
echo $sContent;
file_put_contents('./utf8.txt','');
file_put_contents('./utf8.txt',$sContent);
echo '';
print_r($aTable);
echo '

';
?>

--------------------------------------------------------------------------------------------------
         Il vaut mieux poser une question et passer pour bête que le rester toute sa vie

3 réponses

Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
et sinon, un utf8_decode() sur tes sorties de base devrait fonctionner, avec tes données déjà mal-en-point.
Sinon, un bête str_replace () ;-)
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Hello Alex,

soit tu encodes ta table en utf8, en faisant gaffe à la sortie
soit tu décodes tes chaînes utf8 avant de les insérer en base
et l'autre truc, tu peux faire un htmlentities() sur tes chaînes avant de les insérer en base ?
Messages postés
1423
Date d'inscription
mardi 14 décembre 2004
Statut
Membre
Dernière intervention
29 décembre 2012
4
kikoo johan
en fait pour expliquer le topo, la bdd contient ces données étranges mais aussi des données "normales"

je peux très bien avoir par exemple comme donnée euh ...:
donnée1
donnée
et ce dans le meme champs de la même table.
En fait elle contient un dump d'une table iso je suppose et maintenant elle fonctionne en utf8 de ce fait j'ai les 2 dans la table.
Pour faire encore plus drole, la classe qui recupere les données de cette table fait 40ko avec un code hyper crade du coup je pensais faire un script pour mettre a jour les données qui sont "moches".

Je suis arrivé a la conclusion de faire un script qui liste les tables, les champs, qui recupere les contenu de tous les enregistrements de tous les champs de toutes les tables et regarder si les caracteres caracteristique de l'encodage utf8 sont présent.

S'ils le sont, je str_replace par le caractère qui va bienet j update via les vielles valeurs.
C'est bcp pour pas grand chose mais bon ... au moins ca a l air de marcher et je crois que bcp de sites devrait en faire autant vu certains affichages pourris

Merci en tt cas de t'etre penché sur le problème

--------------------------------------------------------------------------------------------------
         Il vaut mieux poser une question et passer pour bête que le rester toute sa vie