diff --git a/ecrire/inc/exporter_csv.php b/ecrire/inc/exporter_csv.php index e419bf23b779dc5df5a9ed77886418623a78615a..729bc92afdc46f9c76d1509bb87474c459388d07 100644 --- a/ecrire/inc/exporter_csv.php +++ b/ecrire/inc/exporter_csv.php @@ -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(); diff --git a/ecrire/inc/importer_csv.php b/ecrire/inc/importer_csv.php index 33fde21a087ae7f953d2d7209c4d5009aacadf2e..4b2ace70213de833a3217f5bc1745380ec53a75b 100644 --- a/ecrire/inc/importer_csv.php +++ b/ecrire/inc/importer_csv.php @@ -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;