X-Git-Url: http://git.cyclocoop.org/?p=velocampus%2Fweb%2Fwww.git;a=blobdiff_plain;f=www%2Fecrire%2Fbase%2Fconvert_utf8.php;fp=www%2Fecrire%2Fbase%2Fconvert_utf8.php;h=e225c85dfc100af960d549363e90920dbeaa264a;hp=0000000000000000000000000000000000000000;hb=80b4d3e85f78d402ed2e73f8f5d1bf4c19962eed;hpb=aaf970bf4cdaf76689ecc10609048e18d073820c diff --git a/www/ecrire/base/convert_utf8.php b/www/ecrire/base/convert_utf8.php new file mode 100644 index 0000000..e225c85 --- /dev/null +++ b/www/ecrire/base/convert_utf8.php @@ -0,0 +1,159 @@ + $champ) { + spip_log("demande update charset table $table ($champ)"); + spip_query("UPDATE $table SET $champ = CONCAT('', $champ) WHERE $champ NOT LIKE ' $v) { + $v2 = unicode_to_utf_8(charset2unicode($v, $charset_source)); + if ($v2 != $v) ecrire_meta($c, $v2); + } +} + +// http://doc.spip.org/@base_convert_utf8_dist +function base_convert_utf8_dist($titre='', $reprise=false) +{ + if (!$titre) return; // anti-testeur automatique + // une liste des tables a convertir, avec le champ dans lequel on + // indique '' ; on commence par les rubriques sinon + // ca fait desordre dans l'interface privee + $tables_a_convertir = array( + 'spip_rubriques' => 'titre', + 'spip_auteurs' => 'nom', + 'spip_articles' => 'titre', + 'spip_breves' => 'titre', + 'spip_documents' => 'titre', + 'spip_forum' => 'titre', + 'spip_mots' => 'titre', + 'spip_groupes_mots' => 'titre', + 'spip_petitions' => 'texte', + 'spip_signatures' => 'nom_email', + 'spip_syndic' => 'nom_site', + 'spip_syndic_articles' => 'titre', + 'spip_messages' => 'titre' + ); + + if (!$reprise) convert_utf8_init($tables_a_convertir); + + echo install_debut_html($titre); + + echo "

", _T('utf8_convert_timeout'), "


\n"; + + // preparer un fichier de sauvegarde au cas ou + // on met 'a' car ca peut demander plusieurs rechargements + $f = @fopen(_DIR_TMP.'convert_utf8_backup.sql', 'a'); + + foreach ($tables_a_convertir as $table => $champ) { + convert_table_utf8($f, $table, $champ); + } + + if ($f) fclose($f); + + echo "

"._T('utf8_convert_termine')."

"; + echo "

,"._T('utf8_convert_verifier', array('rep' => joli_repertoire(_DIR_TMP))), '

'; + + // bouton "retour au site" + redirige_par_entete + echo "

", + " >> ", + _T('icone_retour'),"

", + install_fin_html(); +} + + +// http://doc.spip.org/@convert_table_utf8 +function convert_table_utf8($f, $table, $champ) +{ + echo "
$table   "; + $s = spip_query("SELECT * FROM $table WHERE $champ LIKE ' $v) { + if ($c == $champ) { + preg_match(',^,', $v, $reg); + $v = substr($v, strlen($reg[0])); + $charset_source = $reg[1]; + $query[] = "$c=" . sql_quote($v); + } else { + if (!is_numeric($v) + AND !is_ascii($v)) { + // traitement special car donnees serializees + if ($c == 'extra') { + $query_no_convert .= ", $c=".sql_quote($v); + $query_extra = convert_extra($v, $charset_source); + } else + $query[] = "$c=" . sql_quote($v); + } else + # pour le backup + $query_no_convert .= ", $c=".sql_quote($v); + } + } + + $set = join(', ', $query); + $where = "$id_champ = ".$t[$id_champ]; + + // On l'enregistre telle quelle sur le fichier de sauvegarde + if ($f) fwrite($f, + "UPDATE $table SET $set$query_no_convert" + ." WHERE $where;\n" + ); + + // Mais on la transcode + // en evitant une double conversion + if ($charset_source != 'utf-8') { + $query = "UPDATE $table SET " + . unicode_to_utf_8(charset2unicode($set, $charset_source)) + . $query_extra + . " WHERE $where AND $champ LIKE '$val) + $extra[$key] = unicode_to_utf_8( + charset2unicode($val, $charset_source)); + return ", extra=".sql_quote(serialize($extra)); + } +} +?>