使用php检索的文本区域中的换行符/返回

时间:2012-09-29 12:52:45

标签: php html web

修改 我的问题简化了,我认为已经归结为无法完全删除新行字符。

我试过了:$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 个答案:

答案 0 :(得分:1)

尝试

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

编辑:

您也可以尝试:

$_POST["new_content"] = ( preg_replace( '/\s+/', '<br/>', $_POST["new_content"] ) ); 

答案 1 :(得分:1)

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

有关特殊字符和转义的更多常规信息,请参阅http://kunststube.net/escapism。您需要为自己的文件格式提出自己的规则,或采用XML等已建立的格式。

答案 2 :(得分: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);

答案 3 :(得分:1)

在nl2br的文档评论中找到答案:

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

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