diff --git a/core/bulkexport.class.inc.php b/core/bulkexport.class.inc.php index 4b54bc73e..8558acca4 100644 --- a/core/bulkexport.class.inc.php +++ b/core/bulkexport.class.inc.php @@ -356,6 +356,10 @@ abstract class BulkExport { } + public function GetCharacterSet() + { + return 'UTF-8'; + } public function GetStatistics() { diff --git a/core/csvbulkexport.class.inc.php b/core/csvbulkexport.class.inc.php index 672b23729..a64049a82 100644 --- a/core/csvbulkexport.class.inc.php +++ b/core/csvbulkexport.class.inc.php @@ -302,5 +302,9 @@ class CSVBulkExport extends TabularBulkExport { return 'csv'; } + public function GetCharacterSet() + { + return $this->aStatusInfo['charset']; + } } diff --git a/pages/ajax.render.php b/pages/ajax.render.php index bb17962fa..56e73b9f1 100644 --- a/pages/ajax.render.php +++ b/pages/ajax.render.php @@ -2122,7 +2122,16 @@ EOF $aResult['token'] = $oExporter->SaveState(); if (substr($oExporter->GetMimeType(), 0, 5) == 'text/') { - $aResult['text_result'] = file_get_contents($oExporter->GetTmpFilePath()); + // Result must be encoded in UTF-8 to be passed as part of a JSON structure + $sCharset = $oExporter->GetCharacterSet(); + if (strtoupper($sCharset) != 'UTF-8') + { + $aResult['text_result'] = iconv($sCharset, 'UTF-8', file_get_contents($oExporter->GetTmpFilePath())); + } + else + { + $aResult['text_result'] = file_get_contents($oExporter->GetTmpFilePath()); + } $aResult['mime_type'] = $oExporter->GetMimeType(); } $aResult['message'] = Dict::Format('Core:BulkExport:ClickHereToDownload_FileName', $oExporter->GetDownloadFileName()); @@ -2152,7 +2161,7 @@ EOF $sMimeType = $oExporter->GetMimeType(); if (substr($sMimeType, 0, 5) == 'text/') { - $sMimeType .= ';charset=utf-8'; + $sMimeType .= ';charset='.strtolower($oExporter->GetCharacterSet()); } $oPage->SetContentType($sMimeType); $oPage->SetContentDisposition('attachment', $oExporter->GetDownloadFileName()); diff --git a/webservices/export-v2.php b/webservices/export-v2.php index 693ee0643..34d3239de 100644 --- a/webservices/export-v2.php +++ b/webservices/export-v2.php @@ -506,7 +506,12 @@ function DoExport(WebPage $oP, BulkExport $oExporter, $bInteractive = false) else { $exportResult .= $oExporter->GetFooter(); - $oP->SetContentType($oExporter->GetMimeType()); + $sMimeType = $oExporter->GetMimeType(); + if (substr($sMimeType, 0, 5) == 'text/') + { + $sMimeType .= ';charset='.strtolower($oExporter->GetCharacterSet()); + } + $oP->SetContentType($sMimeType); $oP->SetContentDisposition('attachment', $oExporter->GetDownloadFileName()); $oP->add($exportResult); $oExporter->Cleanup(); @@ -661,8 +666,7 @@ try $bInteractive = utils::ReadParam('interactive', false); $sMode = utils::ReadParam('mode', ''); - $bMustBeAdmin = $bInteractive; - LoginWebPage::DoLogin($bMustBeAdmin); // Check user rights and prompt if needed + LoginWebPage::DoLogin(); // Check user rights and prompt if needed ApplicationContext::SetUrlMakerClass('iTopStandardURLMaker');