Данные Codeigniter к CSV-символам проблема с арабским

Я использую codeigniter в качестве основы с набором символов подключения

$config['charset'] = 'UTF-8';

Арабский правильно отображается на веб-сайте и в базе данных. Проблема заключается в экспорте данных в CSV-файл. Файл отображается правильно с помощью редактора кода на cPanel, но когда я загружаю файл и открываю его с помощью Excel, я получаю это

проблема с арабским

Когда я открываю его с помощью блокнота, арабский язык отображается правильно, но когда я загружаю файл в каталог продуктов Facebook, он также отображает неправильно арабский язык. вот код

$handler = fopen('./directory/'.$fileName,'a+');

$exporteddata = 'availability,condition,description'.PHP_EOL;
for ($x=0; $x<count($cat_products); $x++) {
if(strlen(trim($cat_products[$x]->description)) == '0'){
$description = ' ';
}
else{
$description = $cat_products[$x]->description;
}
$exporteddata .= 'in stock,new,'.$description.PHP_EOL;
}
fwrite($handler,$exporteddata);
fclose($handler);

Затем перенаправьте на функцию, которая начинает загрузку файла с помощью этого кода

public function get_file($file){
header('Content-Encoding: UTF-8');
header('Content-type: text/csv; charset=UTF-8');
header("Content-Type: application/csv");
header('Pragma: no-cache');
header("Content-Disposition: attachment; filename=".basename($file) . "\"");
echo "\xEF\xBB\xBF";

$file = 'directory/'.$file;
if (!is_file($file)) {
header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found');
echo 'File not found '.$file;
} elseif (!is_readable($file)) {
header($_SERVER['SERVER_PROTOCOL'] . ' 403 Forbidden');
echo 'File not readable';
} else {
header($_SERVER['SERVER_PROTOCOL'] . ' 200 OK');
readfile($file);
}
}

Если мы проигнорируем функцию загрузки и сконцентрируемся на самих данных, загруженных из файлового менеджера из cPanel, у меня все равно останется проблема, поэтому она связана не только с функцией загрузки, но и с функцией записи.

Итак, как исправить проблему с кодировкой, чтобы арабский язык правильно отображался в CSV, если он открыт с Excel, чтобы его можно было правильно импортировать с помощью Facebook.

[ОБНОВИТЬ] Когда я открываю файл в блокноте и сохраняю его в кодировке ANSI, то открываю новый файл с арабскими данными Excel, которые отображаются правильно. Могу ли я изменить кодировку записи на ANSI, используя php?

2

Решение

Это решило проблему, но все же Facebook получает неправильную кодировку, я свяжусь с Facebook для этого. Первый

mb_convert_encoding($exporteddata, "Windows-1252", "UTF-8");
fwrite($handler,$exporteddata);
fclose($handler);

второй

public function get_file($file){
$file = 'directory/'.$file;
if (!is_file($file)) {
header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found');
echo 'File not found '.$file;
} elseif (!is_readable($file)) {
header($_SERVER['SERVER_PROTOCOL'] . ' 403 Forbidden');
echo 'File not readable';
} else {
header($_SERVER['SERVER_PROTOCOL'] . ' 200 OK');
header('Content-Encoding: UTF-8');
header('Content-type: text/csv; charset=UTF-8');
header("Content-Type: application/csv");
header('Pragma: no-cache');
echo "\xEF\xBB\xBF";
header("Content-Disposition: attachment; filename=\"" . basename($file) . "\"");
readfile($file);
}
}

Добавление эха «\ xEF \ xBB \ xBF»; для функции загрузки и mb_convert_encoding для функции сохранения решена проблема, и арабские данные отображаются правильно как в Excel, так и в блокноте.

1

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

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

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