【问题标题】:Save Carriage Return in CSV将回车保存为 CSV
【发布时间】:2015-11-25 15:25:27
【问题描述】:

我必须用 PHP 创建一个博客站点。

目前,我将每个新博客条目的文本保存在带有标题、实际日期和 ID 的 .txt 文件中。

只要 - 这就是问题所在 - 我不输入回车,它就可以很好地工作。每次我按“Enter”键时,条目都不会正确显示,因为它将新行标识为新条目。

你会如何解决这个问题?谢谢你的回答

这是 PHP 代码

<?php
if (isset($_POST["newpost"])){

    $datum = date('d.m.Y H:i:s');

    $file2 = file('./data/blog/'.$userid.'.txt');
    $titel = $_POST['titel'];
    $body = $_POST['body'];

    foreach ($file2 as $filee) 
            {
                $blog_details = explode(';', $filee);
                $id_stored = $blog_details[0];
            }
                if (!empty($id_stored))
                    {
                        $id = $id_stored +1;
                    } else
                    {
                        $id = 1;
                    }
                        $file = fopen('./data/blog/'.$userid.'.txt', 'a+');
                        $text = $id . ";" . $datum . ";" . $titel . ";" . $body . PHP_EOL;
                        if(fwrite($file, $text)) 
                        {           
                        echo "Dein Blogeintrag wurde gespeichert.";
                        fclose ($file);
                        }
                        else
                        {
                            echo "fail!";
                        }
    }
?>

【问题讨论】:

  • 考虑使用数据库存储博客文章。如果您真的想使用文件,我会将每个帖子存储在单独的文件中或创建一些“自定义”格式并使用 3 个换行符来分隔帖子。
  • 感谢您的评论。不幸的是,我必须将其存储在文本或 csv 文件中,并且不能使用 sql db。我会试试你的提示,使用 3 个换行符而不是 1 个

标签: php newline blogs


【解决方案1】:

您可以在将 $body 中的任何 EOL 字符连接成 $text 之前对其进行标记,使用不太可能的标记,例如 #EOL#...
str_replace("\n",'#EOL#',$body)
...这样,任何博客条目都应该只占文本文件中的一行。

当然,在恢复博客条目时,您需要做相反的事情,用实际的 EOL 替换令牌等。
注意,如果博客条目可能包含“\r\n”等,您可能需要更加灵活地识别原始 EOL,但您明白了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 2013-06-03
    • 2020-09-15
    • 1970-01-01
    相关资源
    最近更新 更多