PHP7, экспорт MySQL в CSV не показывает специальные символы правильно - PullRequest
0 голосов
/ 08 мая 2018

У меня есть HTML-форма, которая хранит данные в MySQL. Когда используются специальные символы (øæå), они правильно хранят символы в базе данных.

Когда я использую сценарий для сохранения таблицы mysql в файл CSV, файл CSV больше не будет отображать правильные специальные символы.

Есть идеи?

$conn = mysqli_connect($hostname, $user, $password, $database, $port);
if (mysqli_connect_errno()) {
die("Failed to connect to MySQL: " . mysqli_connect_error());
}

$csv_export = '';

$query = mysqli_query($conn, "SELECT * FROM ".$db_record);
$field = mysqli_field_count($conn);

for($i = 0; $i < $field; $i++) {
$csv_export.= mysqli_fetch_field_direct($query, $i)->name.';';
}

$csv_export.= '
';

while($row = mysqli_fetch_array($query)) {

for($i = 0; $i < $field; $i++) {
$csv_export.= '"'.$row[mysqli_fetch_field_direct($query, $i)->name].'";';
}
$csv_export.= '
';
}

header("Content-type: text/x-csv");
header("Content-Disposition: attachment; filename=".$csv_filename."");
echo($csv_export);

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Без каких-либо симптомов трудно сказать, какие из нескольких исправлений необходимы. См. Проблема с символами UTF-8; я вижу не то, что я сохранил для списка возможных симптомов, вместе с тем, что их вызывает.

При загрузке через LOAD DATA обязательно указывайте набор символов данных как часть оператора.

HTML-формы должны начинаться как <form accept-charset="UTF-8">.

Не делайте никаких действий ALTERs, пока не подтвердите, что выбранный синтаксис будет полезен, а не усугубит ситуацию.

0 голосов
/ 08 мая 2018

Я предполагаю, что ваш скрипт для сохранения mysql в CSV запускается в командной строке или командной строке Windows. Проблема может заключаться в том, что данные, хранящиеся в базе данных, используют другой набор символов, чем среда, используемая вашим сценарием.

Проверьте, в каком формате данные хранятся в базе данных, или измените их на UTF-8:

ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;

И убедитесь, что в вашей среде сценариев используется тот же набор символов. В Ubuntu linux добавление следующих строк в файл / etc / environment может помочь (da_DK для Дании, как только догадка ваших персонажей, вам нужно установить ее на один из ваших персонажей):

LC_ALL=da_DK.UTF-8
LANG=da_DK.UTF-8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...