Невозможно записать в первую строку CSV с помощью переполнения стека

Фон

Я использую php для записи файла csv, содержащего китайский символ. Тем не менее, они не могут хорошо отображаться. Я обнаружил, что проблема в Excel не читает UTF8 без спецификации. И мне нужно добавить спецификацию в первой строке, и она будет работать, если я положу \ xEF \ xBB \ xBF в первую строку с помощью Notepad ++.

Тем не менее, приложение вывода CSV для пользователей. Я не могу сказать пользователю сделать это самостоятельно, поэтому я должен сделать это с помощью PHP.


проблема

Вот код, который я использую для написания тега bom.

<?php
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=file.csv');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
$output = fopen('php://output', 'w');
$BOM = "\xEF\xBB\xBF";
$fwrite($output,$BOM)
?>

Это результат, который я ожидал
+——————+
| \ XEF \ Xbb \ XBF |
| —— пустая строка |
| —- мой контент |
| —- мой контент |
+——————+
Тем не менее, результат
+——————+
| —— пустая строка |
| \ XEF \ Xbb \ XBF |
| —- мой контент |
| —- мой контент |
+——————+
Я попытался fwrite, fputs, fputcsv до сих пор не может поставить тег BOM в первой строке

Есть ли способ поставить его на первую строчку
Или есть какой-нибудь другой способ написать Excel-читаемый CSV-файл, который можно открыть напрямую?

постскриптум мои китайские данные взяты из MySQL и используются:
mysql_query («set names utf8»); mysql_query («set character_set_client = ‘utf8′»);
mysql_query («set character_set_results = ‘utf8′»);
mysql_query («set collation_connection = ‘utf8_general_ci'»);

tl; dr Когда я пишу CSV, он начинает писать во второй строке. Как записать начало файла в первой строке файла?

0

Решение

Исходя из моего опыта, я говорю вам, что первая пустая строка из-за некоторого забытого пробела / пустой строки вне тегов php.

Чтобы получить желаемую пустую строку после строки \ xEF, попробуйте это:

$output = fopen('php://output', 'w');
$BOM = "\xEF\xBB\xBF
";
$fwrite($output,$BOM)

Кроме того, если в вашем php-скрипте есть включенные файлы, также проверьте их на наличие пустых мест / строк вне тегов php.

1

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

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