У меня есть огромный запрос с множеством взаимосвязей, объединений и функций БД. Вот пример извлечения запроса:
SELECT * FROM (
SELECT DISTINCT
CASE WHEN objeto.objeto_clave IS NULL THEN objeto.objeto_numero ELSE objeto.objeto_clave END AS "Número",
CASE WHEN objeto.objeto_estatus = 'V' THEN 'Válido' ELSE 'No válido' END AS "Válido"
FROM objeto
WHERE objeto.objeto_id IN (1, 2, 3)
GROUP BY objeto.objeto_id, objeto.objeto_numero, objeto.objeto_clave, objeto.objeto_estatus
) AS "Excel" ORDER BY (CASE WHEN "Número" IS NULL THEN substring("Número",3) ELSE substring("Número",6) END) ASC
Я использую cakephp 2.x для создания отчета excel с помощью метода, который позволяет вам загружать файл excel, берущий данные из соединения с базой данных (имя_базы_данных, пользователь и т. д.), запрос sql и выполнение системной команды для создания файл, заполненный данными, полученными в результате запроса, с использованием параметра -H для табличного вывода HTML и -c для выполнения sql как команды:
$command = <<<CMMD
psql -h $host -p $port -d $db -U $login -H -c "$sql" > $file
CMMD;
system($command);
//Cleaning content
if (is_file($file)) {
$content = file_get_contents($file);
$content = substr($content, 0, strpos($content, '<p>'));
$content = utf8_decode($content);
file_put_contents($file, $content);
}
Все отлично работает на платформе Windows. Проблема возникает, когда вы загружаете файл с помощью Mac, файл создается, но когда вы его открываете, имена столбцов и данные в ячейках с акцентами, такими как: «Número» и «Válido», преобразуются в «N_mero» и «V_lido».
Я хотел бы знать, с чем связана проблема (код, специальная кодировка [Mac Excel], что-то с функцией utf8_decode, что-то еще?) и как я могу с этим справиться.
Это не показывает никаких проблем, если я использую openOffice на том же Mac.