Проблем с кодиране на символи на Codeigniter към csv с арабски

Използвам codeigniter като рамка с набор от символи за връзка

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

Арабският се показва правилно в уебсайта и базата данни. Проблемът е с експортирането на данни в csv файл. Файлът се показва правилно с помощта на редактор на код в cPanel, но когато изтегля файла и го отворя с помощта на excel, получавам това

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

Когато го отворя с notepad, арабският се показва правилно, но когато кача файла в продуктовия каталог на 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.

[АКТУАЛИЗАЦИЯ] Когато отворя файла в Notepad и го запазя с ANSI кодиране, след което отворя новия файл с данни на excel Arabic се показва правилно. Мога ли да променя кодирането за писане на ANSI с помощта на php?


person PHP User    schedule 08.05.2017    source източник
comment
Как да напишете utf-8 CSV, който Excel ще прочете правилно отговор тук. Това е стар въпрос, но има няколко отговора за последните версии на Excel.   -  person ourmandave    schedule 08.05.2017


Отговори (1)


Това реши проблема, но все още 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, така и в бележника.

person PHP User    schedule 08.05.2017