【问题标题】:PHP HTML String into CSVPHP HTML 字符串转换成 CSV
【发布时间】:2011-04-05 03:34:14
【问题描述】:

绕着圈子转,希望有人能纠正我。

通过 PHP 生成 CSV 并使用我的 MySQL 数据。数据是由用户通过 TinyMCE 输入的,因此有各种“p”标签等,我显然需要去掉这些标签,我可以成功地做到这一点,但是 csv 中的字符串即使在被剥离后仍会显示在各种不同的单元格中。

我尝试使用 strip_tags() 和 preg 匹配 "/n" 和 "/r" 以及各种删除换行符,但没有运气,因为它仍然出现在新单元格上。

我在 csv 中使用分号作为分隔符。

我试图从中删除所有 html 的字符串示例是<p>I would like to join because it looks fun</p><p> </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;

我哪里错了?

谢谢大家:)

【问题讨论】:

    标签: php csv line-breaks


    【解决方案1】:

    CSV 格式的陷阱比人们想象的要多(正如您所经历的那样)。因此,不要重新发明轮子并使用fputcsv,它正确地转义了所有需要转义的东西。

    fputcsv 期望写入文件,但您可以给它一个假文件来代替,如here 所述:

    $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);
    

    【讨论】:

    • 谢谢@deceze。我以这种方式通过 php 创建 csv 文件: header("Content-Type: application/csv"); header("内容配置:附件;文件名=users.csv");.我还能用 fputcsv 吗?
    • @thats 请再看看我的更新,我愚蠢地让伪造文件的写入比它需要的更复杂。您可以直接写入输出缓冲区而无需通过临时文件。
    • 到处寻找这个答案。我开始认为我必须输出到文件然后使用 file_get_contents 才能显示它。谢谢!
    【解决方案2】:

    你忘记了第一个回声的“\r”, 应该是:

    
    echo '用户名;邮箱;加入日期;加入原因'."\r\n";
    

    最好在“for”循环之前将 $csv_data 设置为空白。

    如果 'username', 'email', 'reason_for_joining' 有分号, 该代码将生成格式错误的 csv。

    【讨论】:

    • 最好在 'for' 循环之前将 $csv_data 设置为空白
    • 如果 'username', 'email', 'reason_for_joining' 有分号,代码将生成格式错误的 csv
    • 谢谢@nicola - 我纠正了我的错误。仍然没有运气,我可以确认不存在分号:)。
    • 据我所知,总是有很多“ ”在 TinyMCE 生成的 html 中,你可以看到这个 ' '在示例中加入您的问题的理由。这个' '包含一个分号。也许这就是原因?
    • 我尝试删除 nbsp;但仍然没有运气。但是@deceze 的建议奏效了!谢谢@nicola
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多