Skip to content
Extraits de code Groupes Projets
Valider ca6109c0 rédigé par Fil's avatar Fil
Parcourir les fichiers

conversion utf-8 allégée et compatible avec les champs extra (#392)

)
parent 7a385c3a
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -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);
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter