PHP HTML-строка в CSV - PullRequest
       21

PHP HTML-строка в CSV

0 голосов
/ 05 апреля 2011

Ходить кругами, так что, надеюсь, кто-то может исправить меня.

Создание CSV через PHP и использование моих данных из MySQL.Данные вводятся пользователем через TinyMCE, поэтому они имеют различные теги "p" и т. Д., Которые, очевидно, мне нужно вырезать, что я могу сделать успешно, однако строка в csv по-прежнему отображается в различных ячейках даже после удаления.

Я пытался использовать strip_tags () и preg, совпадающие с "/ n" и "/ r" и всеми видами, чтобы удалить разрывы строк, но не повезло, так как он все еще появляется в новых ячейках.

Яиспользование точки с запятой в качестве разделителя в CSV.

Пример строки, из которой я пытаюсь удалить все html, будет <p>I would like to join because it looks fun</p><p>&nbsp;</p><p>Help me.</p>.Это происходит только тогда, когда у них несколько тегов

или что-то еще - если строка просто одна строка, это не вызывает проблем.

Вот код CSV, который я использую:

    echo 'Username;Email;Date joined;Reason for joining'."\r\n";

    foreach($users as $user) {
        $csv_data .= $user->username . ';' . $user->email. ';' . date("d/m/y", $user->time_created) . ';' .  $user->reason_for_joining  .';'."\r\n";
    }

    echo $csv_data;

Где я ошибаюсь?

Спасибо, ребята:)

Ответы [ 2 ]

2 голосов
/ 05 апреля 2011

В формате CSV больше ловушек, чем можно себе представить (как вы испытываете). Поэтому не изобретайте колесо и используйте fputcsv, который правильно экранирует все, что нужно убежать.

fputcsv ожидает записи в файл, но вы можете вместо этого дать ему поддельный файл для записи, как указано здесь :

$fp = fopen('php://output', 'w');

$delimiter = ';';
$headers = array('Username', 'Email', 'Date joined', 'Reason for joining');
fputcsv($fp, $headers, $delimiter);

foreach ($users as $user) {
    $fields = array($user->...);
    fputcsv($fp, $fields, $delimiter);
}

fclose($fp);
0 голосов
/ 05 апреля 2011

вы забыли "\ r" для первого эха, должно быть:

<b>
echo 'Username;Email;Date joined;Reason for joining'."\r\n";
</b>

и лучше установите пустое значение $ csv_data перед циклом 'for'.

и если любое из 'username', 'email', 'reason_for_joining' имеет точку с запятой, код будет генерировать неправильно сформированный CSV.

...