0

编辑: 我的问题简化了,我想归结为无法完全删除换行符。

我试过:$new_content = str_replace("\n", '<br/>', $_POST["new_content"]); 而且我看不出这不起作用的原因..但是当我检查文本文件时,我仍然有一个神秘的新行,如下所示:

event:|:Test:|:Line 1
<br/>Line 2:|:September 29th, 2012

原始问题:

我有一个带有文本字段和一个非常简单的“数据库”的表单,它只是一个 .txt 文件,我将提交的表单数据存储在其中。除了我刚刚注意到的一个主要问题之外,它一切正常。如果用户按下回车键进入文本框中的新行,无论结果字符串是什么,它都会弄乱我的文本文件,其中新行表示数据库中的另一行。

例如,文本文件通常应如下所示:

type:|:heading:|:content:|:date
event:|:Big Event 2012:|:More info and booking details.:|:September 29th, 2012
event:|:Website relaunch:|:Keep your eyes pealed.:|:September 25th, 2012

现在,如果我要填写表格,请在文本框中按回车键以开始新段落,我的文本文件如下所示:

type:|:heading:|:content:|:date
event:|:Test:|:paragraph 1
paragraph 2:|:September 29th, 2012
event:|:Website relaunch:|:Keep your eyes pealed.:|:September 25th, 2012

如您所见,该字符串已导致数据库中使用了一个新行,而我希望/希望类似..

event:|:Test:|:paragraph 1 \n paragraph 2 :|:September 29th, 2012 //or
event:|:Test:|:paragraph 1 <br/> paragraph 2 :|:September 29th, 2012

我确实尝试在网上寻找类似的问题,但所有的解决方案都指向使用类似的东西,nl2br($_POST["new_content"]);但这似乎会产生一个格式如下的文本文件:

type:|:heading:|:content:|:date
event:|:Test:|:paragraph 1<br />

paragraph 2:|:September 29th, 2012
event:|:Website relaunch:|:Keep your eyes pealed.:|:September 25th, 2012

原来的问题仍然存在。有人可以解释为什么会发生这种情况,或者您对我应该如何在将检索到的字符串$_POST["new_content"]保存在文本文件中之前对其进行格式化有什么建议吗?将不胜感激任何帮助!

4

4 回答 4

1

尝试

$_POST["new_content"] = str_replace("\n", '<br/>', $_POST["new_content"]);

编辑:

你也可以试试:

$_POST["new_content"] = ( preg_replace( '/\s+/', '<br/>', $_POST["new_content"] ) ); 
于 2012-09-29T12:56:56.597 回答
1

你有一个特殊字符的基本问题。换行符是文件格式中的特殊字符。您有两个选择:要么不允许在保存的内容中出现换行符,要么以某种方式对换行符进行转义/编码,例如\n在写入文件之前将其替换为。这也意味着这\n是一个特殊字符,因此您需要以\n某种方式转义文本中可能出现的实际字符。

有关特殊字符和转义的更多一般信息,请参阅http://kunststube.net/escapism。您要么需要为您的文件格式制定自己的规则,要么采用一些已建立的格式,如 XML。

于 2012-09-29T13:07:47.257 回答
1

在您的处理文件上尝试此操作以将新内容保存到 txt 文件中:就像 @TheShiftExchange 答案只需在变量内容上添加新换行符,然后再将其保存到 txt 文件中。

$file= 'log.txt';
$content= preg_replace('/\s+/', '', $_POST['new_content']);
$content.= "\n";
$fh= fopen($file, 'a+');
fwrite($fh, $content);
fclose($fh);
$all_contents= file_get_contents($file);
echo nl2br($all_contents);
于 2012-09-29T15:29:23.620 回答
1

在 nl2br 的文档注释中找到答案:

strtr($text, array("\r\n" => '<br />', "\r" => '<br />', "\n" => '<br />'));

来源: http: //php.net/manual/en/function.nl2br.php#91828

于 2012-09-29T18:03:57.130 回答