PHP 在使用 POST 时删除换行符

Posted

技术标签:

【中文标题】PHP 在使用 POST 时删除换行符【英文标题】:PHP removes line breaks when using POST 【发布时间】:2017-02-17 12:56:07 【问题描述】:

我有使用 POST 将信息发送到 php 脚本的表单。 PHP读取$content并将其保存到file.txt,并使用以下代码在浏览器上显示:

$content = $_POST['content'];

file_put_contents("file.txt", $content);
echo $content;

如果我在表格中使用换行符,那么file.txt 将包含它们。但是当我向浏览器回显相同的$content 时,根本没有换行符。我的意思是在源代码中。我的目的是使用$content 以另一种形式<textarea>,但即使是textarea 也不显示任何换行符。

file_put_contents 如何找到换行符?

【问题讨论】:

您使用的是 Windows 吗? 是(使用 apache) 换行符不是 HRML br。 nl2br() Remove new lines from string的可能重复 @batz:这些正则表达式替换都没有任何效果来显示我的换行符。 【参考方案1】:

向浏览器显示内容时使用php函数nl2br()

<?php echo nl2br($content); ?> 

nl2br — 在字符串中的所有换行符之前插入 html 换行符

http://php.net/manual/en/function.nl2br.php

【讨论】:

echo nl2br($content) 没有任何作用。我也尝试用 str_replace 将“\n”替换为“”,但没有成功。 @darx 我在我的最终文件上测试过显示换行符,浏览器也使用nl2br() 显示换行符。你能告诉我你有什么$content吗?【参考方案2】:

我认为换行符并没有消失。它们只是在记事本或基于 Windows 的编辑器中不可见。

大多数浏览器仅使用 Unix / MacOS 换行符 (\n),而 Windows 编辑器仅识别 Windows 换行符 (\r\n)。

代替

$content = $_POST['content'];

试着去做

$content = str_replace("\n", "\r\n", $_POST['content']);

更多参考:

Difference between CR LF, LF and CR line break types?

【讨论】:

感谢您的回答,但将“\n”替换为“\r\n”没有任何效果。当我在任何编辑器中打开 file.txt 时,它包含所有换行符。所以这不是问题。问题是在网页中,我无法获得这些换行符。【参考方案3】:

试试这个:

$content = $_POST['content'];

file_put_contents("file.txt", $content);
echo "<pre>";
echo $content;
echo "</pre>";

【讨论】:

试过了。没有帮助。似乎 POST 以某种方式摆脱了我所有的换行符,但事实并非如此,因为file_put_contents 将所有换行符保存到文本文件中。 $content 是来自 textarea 还是 input? 它来自 javascript 生成的输入标签。输入不支持换行?但是我如何才能将它们保存在保存的文件中...【参考方案4】:

好的,感谢 Skye,问题解决了。我使用 javascript 生成的&lt;input&gt; 标记来发送包含换行符的文本。我把它改成了&lt;textarea&gt;,现在我可以捕捉到所有的换行符了。

我仍然无法理解为什么从 &lt;input&gt; 保存到 file.txt 时会出现换行符...

【讨论】:

以上是关于PHP 在使用 POST 时删除换行符的主要内容,如果未能解决你的问题,请参考以下文章

PHP使用换行符从textarea保存内容

如何在html textarea POST数据中保留换行符

如果在文件末尾省略PHP块的结束标记,是否会删除任何换行符或空格(如果存在于相应的文件中)?

从字符串 PHP 中删除换行符 [重复]

在 Flash TLF 可编辑字段中维护换行符

php的PHP_EOL在Ajax中的问题