CSV — Добавление спецификации в поток вывода PHP

Я хочу экспортировать некоторые данные со знаком фунта в файл CSV, и я добавляю спецификацию для правильного представления фунта. Я столкнулся с ситуацией, когда я пишу в поток вывода php php://output Спецификация была где-то проигнорирована, чтобы в файле не было этих 3 байтов. Интересный факт, если вы дублируете строку спецификации (что-то вроде \xef\xbb\xbf\xef\xbb\xbf) первые 3 байта будут проигнорированы и в файле останутся только последние 3 байта.
Это воспроизведение только для записи в выходной поток. Когда я пытался записать в реальном файле все работает, как ожидалось.

РЕДАКТИРОВАТЬ:
Чтобы уточнить мой вопрос. Может кто знает, почему так работает? И как я могу решить проблему без костылей, таких как дублирующаяся строка спецификации

РЕДАКТИРОВАТЬ:
Я использую Symfony 2.8 StreamedResponse. Так что код работает как

$f = fopen('php://output', 'r+');
fwrite($f, "\xef\xbb\xbf\xef\xbb\xbf"); // only 3 bytes will exists
// other code. fputcsv(...) .. fflush($f)

И файлы, с которыми я проверяю https://hexed.it/

0

Решение

Похоже, вот как работает алгоритм декодирования UTF-8 в браузерах, см. https://stackoverflow.com/a/42717677

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector