Skip to content
Extraits de code Groupes Projets
Valider 3540e6c3 rédigé par marcimat's avatar marcimat
Parcourir les fichiers

On se synchronise avec Spip-Bonux-3 un peu plus sur les fonctions d’import / export CSV,

et notamment on intègre r102584 qui permet de spécifier un charset sur l’import.
parent f6f521fe
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -52,12 +52,11 @@ function exporter_csv_champ($champ) {
* Si défini exporte dans le charset indiqué
* @return string
*/
function exporter_csv_ligne($ligne, $delim = ', ', $importer_charset = null) {
function exporter_csv_ligne($ligne, $delim = ',', $importer_charset = null) {
$output = join($delim, array_map('exporter_csv_champ', $ligne)) . "\r\n";
if ($importer_charset) {
$output = unicode2charset(html2unicode(charset2unicode($output)), $importer_charset);
}
return $output;
}
......@@ -104,6 +103,7 @@ function inc_exporter_csv_dist($titre, $resource, $delim = ', ', $entetes = null
}
$filename = "$filename.$extension";
$output = '';
if ($entetes and is_array($entetes) and count($entetes)) {
$output = exporter_csv_ligne($entetes, $delim, $importer_charset);
}
......@@ -124,7 +124,7 @@ function inc_exporter_csv_dist($titre, $resource, $delim = ', ', $entetes = null
header("Content-Type: text/comma-separated-values; charset=$charset");
header("Content-Disposition: attachment; filename=$filename");
//non supporte
//Header("Content-Type: text/plain; charset=$charset");
//header("Content-Type: text/plain; charset=$charset");
header("Content-Length: $length");
ob_clean();
flush();
......
......@@ -31,18 +31,33 @@ include_spip('inc/charsets');
/**
* Importer le charset d'une ligne
*
* @param string $texte
* Importe un texte de CSV dans un charset et le passe dans le charset du site (utf8 probablement)
* Les CSV peuvent sous ms@@@ avoir le charset 'iso-8859-1', mais pasfois aussi 'windows-1252' :/
*
* @param mixed $texte
* @param bool|string $definir_charset_source
* false : ne fait rien
* string : utilisera pour les prochains imports le charset indiqué
* true : remet le charset d'import par défaut de la fonction
* @return array
*/
function importer_csv_importcharset($texte) {
function importer_csv_importcharset($texte, $definir_charset_source = false) {
// le plus frequent, en particulier avec les trucs de ms@@@
$charset_source = 'iso-8859-1';
static $charset_source = 'iso-8859-1';
if ($definir_charset_source) {
if ($definir_charset_source === true) {
$charset_source = 'iso-8859-1';
} else {
$charset_source = $definir_charset_source;
}
}
// mais open-office sait faire mieux, donc mefiance !
if (is_utf8($texte)) {
$charset_source = 'utf-8';
$charset = 'utf-8';
} else {
$charset = $charset_source;
}
return importer_charset($texte, $charset_source);
return importer_charset($texte, $charset);
}
/**
......@@ -66,13 +81,17 @@ function importer_csv_nettoie_key($key) {
* @param string $delim
* @param string $enclos
* @param int $len
* @param string $charset_source
* Permet de définir un charset source du CSV, si différent de utf-8 ou iso-8859-1
* @return array
*/
function inc_importer_csv_dist($file, $head = false, $delim = ", ", $enclos = '"', $len = 10000) {
function inc_importer_csv_dist($file, $head = false, $delim = ',', $enclos = '"', $len = 10000, $charset_source = '') {
$return = false;
if (@file_exists($file)
and $handle = fopen($file, "r")
) {
and $handle = fopen($file, 'r')) {
if ($charset_source) {
importer_csv_importcharset('', $charset_source);
}
if ($head) {
$header = fgetcsv($handle, $len, $delim, $enclos);
if ($header) {
......@@ -109,6 +128,9 @@ function inc_importer_csv_dist($file, $head = false, $delim = ", ", $enclos = '"
$return[] = $data;
}
}
if ($charset_source) {
importer_csv_importcharset('', true);
}
}
return $return;
......
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