Fix: [ bug #253 ] Non UTF-8 characters in CSV exports

This commit is contained in:
Laurent Destailleur 2011-12-21 16:15:21 +01:00
parent cae7b6c39c
commit ba5adb29d8
2 changed files with 11 additions and 8 deletions

View File

@ -166,7 +166,7 @@ class ExportCsv extends ModeleExports
foreach($array_selected_sorted as $code => $value) foreach($array_selected_sorted as $code => $value)
{ {
$newvalue=$outputlangs->transnoentities($array_export_fields_label[$code]); $newvalue=$outputlangs->transnoentities($array_export_fields_label[$code]);
$newvalue=$this->csv_clean($newvalue); $newvalue=$this->csv_clean($newvalue,$outputlangs->charset_output);
fwrite($this->handle,$newvalue.$this->separator); fwrite($this->handle,$newvalue.$this->separator);
} }
@ -207,7 +207,7 @@ class ExportCsv extends ModeleExports
$newvalue=$outputlangs->transnoentities($reg[1]); $newvalue=$outputlangs->transnoentities($reg[1]);
} }
$newvalue=$this->csv_clean($newvalue); $newvalue=$this->csv_clean($newvalue,$outputlangs->charset_output);
fwrite($this->handle,$newvalue.$this->separator); fwrite($this->handle,$newvalue.$this->separator);
$this->col++; $this->col++;
@ -237,15 +237,17 @@ class ExportCsv extends ModeleExports
/** /**
* Clean a cell to respect rules of CSV file cells * Clean a cell to respect rules of CSV file cells
* @param newvalue String to clean *
* @return string Value cleaned * @param string $newvalue String to clean
* @param string $charset Output character set
* @return string Value cleaned
*/ */
function csv_clean($newvalue) function csv_clean($newvalue, $charset)
{ {
$addquote=0; $addquote=0;
// Rule Dolibarr: No HTML // Rule Dolibarr: No HTML
$newvalue=dol_string_nohtmltag($newvalue); $newvalue=dol_string_nohtmltag($newvalue,1,$charset);
// Rule 1 CSV: No CR, LF in cells // Rule 1 CSV: No CR, LF in cells
$newvalue=str_replace("\r",'',$newvalue); $newvalue=str_replace("\r",'',$newvalue);

View File

@ -3499,12 +3499,13 @@ function picto_required()
* Clean a string from all HTML tags and entities * Clean a string from all HTML tags and entities
* @param StringHtml String to clean * @param StringHtml String to clean
* @param removelinefeed Replace also all lines feeds by a space * @param removelinefeed Replace also all lines feeds by a space
* @param pagecodeto Encoding of input string
* @return string String cleaned * @return string String cleaned
*/ */
function dol_string_nohtmltag($StringHtml,$removelinefeed=1) function dol_string_nohtmltag($StringHtml,$removelinefeed=1,$pagecodeto='UTF-8')
{ {
$pattern = "/<[^>]+>/"; $pattern = "/<[^>]+>/";
$temp = dol_entity_decode($StringHtml); $temp = dol_entity_decode($StringHtml,$pagecodeto);
$temp = preg_replace($pattern,"",$temp); $temp = preg_replace($pattern,"",$temp);
// Supprime aussi les retours // Supprime aussi les retours