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() { ...@@ -137,32 +137,49 @@ function exec_convert_utf8_dist() {
// lire les donnees dans un array // lire les donnees dans un array
while ($t = spip_fetch_array($s, SPIP_ASSOC)) { while ($t = spip_fetch_array($s, SPIP_ASSOC)) {
$query = array(); $query = array();
$mod_extra = false;
foreach ($t as $c => $v) { foreach ($t as $c => $v) {
if ($c == $champ) { if ($c == $champ) {
preg_match(',^<CONVERT (.*?)>,', $v, $reg); preg_match(',^<CONVERT (.*?)>,', $v, $reg);
$v = substr($v, strlen($reg[0])); $v = substr($v, strlen($reg[0]));
$charset_source = $reg[1]; $charset_source = $reg[1];
} }
if (is_numeric($v)) if (!is_numeric($v)
$query[] = "$c=$v"; AND !is_ascii($v)) {
else
$query[] = "$c=" . spip_abstract_quote($v); $query[] = "$c=" . spip_abstract_quote($v);
# traitement special car donnees serializees
if ($c == 'extra') $mod_extra = $v;
}
} }
$set = join(', ', $query); $set = join(', ', $query);
$where = "$id_champ = ".$t[$id_champ]; $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 // Cette query ne fait que retablir les donnees existantes
// en evitant une double conversion if ($set) {
if ($charset_source != 'utf-8') { $query = "UPDATE $table SET $set WHERE $where" ;
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(); // 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); spip_free_result($s);
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter