Вывод строки в проблемы с пробелами в файле csv

Я использую следующее, чтобы сохранить вырезанное содержимое страницы в CSV-файл на моем сервере.

$strippedpage = str_replace('<br>',' ', $semistrippedpage);
    file_put_contents('yourpage.csv', $strippedpage);

до этого в коде я просто использую str_replace, чтобы удалить весь html и отформатировать его как файл csv.

    1-Do you like Science?,
    5,2
    1,6
    3,7
    6,8
    7,9
    85,Love
    6,Ok
    15,Strongly Dislike
    2- Do you enjoy science lessons at school?,
    1,3
    1,4
    5,7
    4,8
    2,9
    78,Love
    21,Ok
    16,Strongly Dislike
    3-How often do you use ICT in Science Lessons? (E.g. microscopes digital cameras easi-speak mics.),
    29,2
    8,3
    11,4
    20,6
    4,7
    27,In Some Lessons
    29,Not At All

Единственный html, оставшийся в строке, — это теги BR для разделения строк.

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

Проблема, с которой я сталкиваюсь, заключается в том, что если я открою сгенерированный файл yourpage.csv на сервере, я получу следующее:

1-Do you like Science?, 5,2 1,6 3,7 6,8 7,9 85,Love 6,Ok 15,Strongly Dislike 2- Do you enjoy science lessons at school?, 1,3 1,4 5,7 4,8 2,9 78,Love 21,Ok 16,Strongly Dislike 3-How often do you use ICT in Science Lessons? (E.g. microscopes  digital cameras  easi-speak mics.), 29,2 8,3 11,4 20,6 4,7 27,In Some Lessons 29,Not At All 4-How often do you get to do practical Science in lessons?, 1,No Answer 17,2 8,3 14,4 4,6 8,7 5,8 1,9 11,In Every Lesson 56,In Some Lessons 3,

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


person Iain Simpson    schedule 26.06.2013    source источник
comment
Конец строки отличается в системах Windows и Unix: cs.toronto.edu/~krueger/csc209h/tut/line-endings.html. Блокноту нужны окончания строк Windows, в то время как другие редакторы (notepad++, ultraedit,...) могут понимать окончания строк Unix. Я бы предложил использовать один из них.   -  person Laurent S.    schedule 26.06.2013


Ответы (2)


вместо того, чтобы удалять br, вы можете заменить их новыми тегами строк

I.E> $nl = preg_replace('#<br\s*/?>#i', "\n", $html);

может заставить вас двигаться в правильном направлении?

person Dave    schedule 26.06.2013

В PHP символ новой строки обычно равен \n, тогда как \r\n используется в большинстве программ Windows (например, в Блокноте).

Из-за этого Блокнот Windows не идентифицирует разрывы строк.

Попробуйте открыть CSV-файл в другом редакторе (например, Notepad++) и посмотрите если вы получите тот же результат.

Кроме того, я бы посоветовал вам использовать fputcsv для создания CSV-файла вместо простой str_replace, так как он намного безопаснее (например, он может обрабатывать специальные символы).

person Mathieu Rodic    schedule 26.06.2013