Входной CSV-файл (примечание: есть непечатаемый символ LF \ n после фруктов):
1,"apple", "水果fruit\n",300
2,"donut", "甜點dessert",200
Моя PHP программа:
function wpa(&$arr) { echo nl2br(print_r($arr, true)); }
header("Content-Type:text/html; charset=utf-8");
$lines = file("test.csv", FILE_IGNORE_NEW_LINES);
);
ВПА ($ линии);
Выход:
Array
(
[0] => 1,"水果apple", "fruit
[1] => \n",300
[2] => 2,"甜點donut", "dessert",200
)
Мой вопрос:
Как я могу прочитать в файле CSV и правильно разделить его на 2 строки CSV, кроме использования Fgetcsv? (примечание: входной файл содержит китайские символы в кодировке BIG5, и fgetcsv испортит эти китайские символы в моей среде PHP 5.2)?
Это не постоянный ответ, но он заботится о моей проблеме:
Поскольку входной файл редактируется под Windows, я пишу следующие сегменты кода:
$data = file_get_contents("test.csv");
$lines = explode(PHP_EOL, $data); // or replace PHP_EOL with" \r\n"echo nl2br(print_r($lines,true));
// parse with regular expression for each element in lines
Он выводит правильные 2 строки CSV. Но если входной файл слишком большой для чтения за один раз, я не знаю ответа, так как line (), fgets (), .etc и другие функции чтения текстового файла все рассматривают LF как разрыв строки, даже если вы запускаете PHP-программа под Windows.
Других решений пока нет …