//Force a download and name the file using the current timestamp.
$datetime = date('Ymd-Gi', $_SERVER['REQUEST_TIME']);
CRM_Utils_System::setHttpHeader('Content-Disposition', 'attachment; filename=Report_' . $datetime . '.csv');
- // Output UTF BOM so that MS Excel copes with diacritics. This is recommended as
- // the Windows variant but is tested with MS Excel for Mac (Office 365 v 16.31)
- // and it continues to work on Libre Office, Numbers, Notes etc.
- echo "\xEF\xBB\xBF";
echo self::makeCsv($form, $rows);
CRM_Utils_System::civiExit();
}
*/
public static function makeCsv(&$form, &$rows) {
$config = CRM_Core_Config::singleton();
- $csv = '';
+
+ // Output UTF BOM so that MS Excel copes with diacritics. This is recommended as
+ // the Windows variant but is tested with MS Excel for Mac (Office 365 v 16.31)
+ // and it continues to work on Libre Office, Numbers, Notes etc.
+ $csv = "\xEF\xBB\xBF";
// Add headers if this is the first row.
$columnHeaders = array_keys($form->_columnHeaders);
$value = $row[$v] ?? NULL;
if (isset($value)) {
// Remove HTML, unencode entities, and escape quotation marks.
- $value = str_replace('"', '""', html_entity_decode(strip_tags($value)));
+ $value = str_replace('"', '""', html_entity_decode(strip_tags($value), ENT_QUOTES | ENT_HTML401));
if (CRM_Utils_Array::value('type', $form->_columnHeaders[$v]) & 4) {
if (CRM_Utils_Array::value('group_by', $form->_columnHeaders[$v]) == 'MONTH' ||