Некоторые символы в CSV-файле не читаются во время PHP fgetcsv ()

Я читаю CSV-файл с php. Многие из строк имеют «галочку», которая на самом деле является символом квадратного корня: √ и PHP-код просто пропускает этот символ каждый раз, когда он встречается.

Вот мой код (печать в окне браузера в формате «CSV style», чтобы я мог проверить, что строки сломаются в нужном месте:

$file = fopen($uploadfile, 'r'); while (($line = fgetcsv($file)) !== FALSE) { foreach ($line as $key => $value) { if ($value) { echo $value.","; } } echo "<br />"; } fclose($file); 

В качестве промежуточного решения я просто нахожу и заменяю галочки на 1 вручную, в Excel. Очевидно, мне хотелось бы получить более эффективное решение 🙂 Спасибо за помощь!

fgetcsv () работает только с обычными символами ASCII; так что это, вероятно, «правильно» при пропуске ваших квадратных символов корня. Однако вместо того, чтобы вручную заменять галочки, вы можете прочитать файл в строке, сделать str_replace () для этих символов, а затем проанализировать его с помощью fgetcsv (). Вы можете превратить строку в указатель файла (для fgetcsv):

 $fp = fopen('php://memory', 'rw'); fwrite($fp, (string)$string); rewind($fp); while (($line = fgetcsv($fp)) !== FALSE) ... 

У меня была аналогичная проблема с акцентированными первыми символами строк. Я в конце концов отказался от fgetscv и сделал следующее, используя fgets() и explode() вместо этого (я предполагаю, что ваш csv разделен запятыми):

 $file = fopen($uploadfile, 'r'); while (($the_line = fgets($file)) !== FALSE) // <-- fgets { $line = explode(',', $the_line); // <-- explode foreach ($line as $key => $value) { if ($value) { echo $value.","; } } echo "<br />"; } fclose($file); 

Вы должны указывать в документации

Примечание. Эта функция учитывается в настройках локали. Если LANG, например, en_US.UTF-8, файлы в однобайтовом кодировании неправильно считываются этой функцией.

перед fgetcsv добавить setlocale (LC_ALL, 'en_US.UTF-8'). В моем случае это было «lt_LT.UTF-8».

Такое поведение сообщается как ошибка php