Browse Source

On permet d'importer un CSV qui serait encodé par exemple en 'window-1252'

en ajoutant une option de plus à la fonction importer_csv() pour définir le 
charset source.
svn/attic/spip-bonux-3/118152
marcimat@rezo.net 6 years ago
parent
commit
2abac99f30
  1. 36
      inc/importer_csv.php
  2. 2
      paquet.xml

36
inc/importer_csv.php

@ -29,17 +29,33 @@ include_spip('inc/charsets');
/**
* Importer le charset d'une ligne
*
* @param unknown_type $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,12 +82,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')) {
if ($charset_source) {
importer_csv_importcharset('', $charset_source);
}
if ($head) {
$header = fgetcsv($handle, $len, $delim, $enclos);
if ($header) {
@ -108,6 +129,9 @@ function inc_importer_csv_dist($file, $head = false, $delim = ',', $enclos = '"'
$return[]=$data;
}
}
if ($charset_source) {
importer_csv_importcharset('', true);
}
}
return $return;
}

2
paquet.xml

@ -1,7 +1,7 @@
<paquet
prefix="spip_bonux"
categorie="outil"
version="3.3.8"
version="3.4.0"
etat="stable"
compatibilite="[3.0.0;3.1.*]"
logo="img_pack/spip-bonux.png"

Loading…
Cancel
Save