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
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 17 oct. 2007 à 20:11
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 ?
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