diff --git a/ecrire/exec/convert_utf8.php b/ecrire/exec/convert_utf8.php index 38d26cac63b4acfba7ed272baa69d39788bba37a..581c9c09ac23ddf38acf660e0340254de28d7d11 100644 --- a/ecrire/exec/convert_utf8.php +++ b/ecrire/exec/convert_utf8.php @@ -137,32 +137,49 @@ function exec_convert_utf8_dist() { // lire les donnees dans un array while ($t = spip_fetch_array($s, SPIP_ASSOC)) { $query = array(); + $mod_extra = false; foreach ($t as $c => $v) { if ($c == $champ) { preg_match(',^<CONVERT (.*?)>,', $v, $reg); $v = substr($v, strlen($reg[0])); $charset_source = $reg[1]; } - if (is_numeric($v)) - $query[] = "$c=$v"; - else + if (!is_numeric($v) + AND !is_ascii($v)) { $query[] = "$c=" . spip_abstract_quote($v); + # traitement special car donnees serializees + if ($c == 'extra') $mod_extra = $v; + } } $set = join(', ', $query); $where = "$id_champ = ".$t[$id_champ]; - // Cette query ne fait que retablir les donnees existantes - - $query = "UPDATE $table SET $set WHERE $where" ; - - // On l'enregistre telle quelle sur le fichier de sauvegarde - if ($f) fwrite($f, $query.";\n"); - // Mais on la transcode - // en evitant une double conversion - if ($charset_source != 'utf-8') { - spip_query("UPDATE $table SET " . unicode_to_utf_8(charset2unicode($set, $charset_source)) . " WHERE " . unicode_to_utf_8(charset2unicode($where, $charset_source)) . " AND $champ LIKE '<CONVERT %'"); - echo '. '; flush(); + // Cette query ne fait que retablir les donnees existantes + if ($set) { + $query = "UPDATE $table SET $set WHERE $where" ; + + // On l'enregistre telle quelle sur le fichier de sauvegarde + if ($f) fwrite($f, $query.";\n"); + + // Mais on la transcode + // en evitant une double conversion + if ($charset_source != 'utf-8') { + spip_query("UPDATE $table SET " . unicode_to_utf_8(charset2unicode($set, $charset_source)) . " WHERE $where AND $champ LIKE '<CONVERT %'"); + echo '. '; flush(); + + // stocker le nouvel extra + if ($mod_extra) { + $extra = unserialize($mod_extra); + foreach ($extra as $key=>$val) + $extra[$key] = unicode_to_utf_8( + charset2unicode($val, $charset_source)); + spip_query("UPDATE $table SET extra=" + . spip_abstract_quote(serialize($extra)) + . " WHERE $where" + ); + } + } } } spip_free_result($s);