Автоматическое преобразование CSV из iso-8859-2 в utf-8 - PullRequest
0 голосов
/ 16 января 2020

У меня довольно много CSV-файлов, которые, к сожалению, закодированы в iso-8859-2 (согласно скобкам). Я хотел бы перебрать эти файлы с помощью PHP и преобразовать их.

Я нашел https://csv.thephpleague.com/9.0/converter/charset/, но способ использования функции преобразования для меня неясен.

Их пример кода

use League\Csv\CharsetConverter;

$csv = new SplFileObject('/path/to/french.csv', 'r');
$csv->setFlags(SplFileObject::READ_CSV | SplFileObject::SKIP_EMPTY);

$encoder = (new CharsetConverter())->inputEncoding('iso-8859-15');
$records = $encoder->convert($csv);

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

$db = ConnectDB::getConnection('address_dtb');

$sql = " ... ";

$stmt = $db->prepare($sql);

$rowCount = 0;

$temp_name = $_FILES['adresscsv']['tmp_name'];

$file_handle = fopen($temp_name, 'r');

while (($items = fgetcsv($file_handle, 1000, ';')) !== FALSE) {

    if($flag) { $flag = false; continue; }

    $stmt->execute($items);

    $rowCount++;

}

fclose($file_handle);

ConnectDB::closeConnection($db);

Как правильно использовать приведенную выше библиотеку PHP CSV для перебора локально сохраненных файлов в for l oop для автоматизировать процесс?

Ответы [ 2 ]

1 голос
/ 17 января 2020

В итоге я использовал iconv как намекнул.

$files = glob('address/*.csv');

foreach ($files as $csv) {
    $file_data = file_get_contents($csv);
    $utf8_file_data = iconv('Windows-1250', 'UTF-8', $file_data);
    file_put_contents($csv, $utf8_file_data);
}
1 голос
/ 16 января 2020

Вам не нужно использовать библиотеку. В PHP есть функция, которая может сделать это iconv

...