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 生成的<input>
标记来发送包含换行符的文本。我把它改成了<textarea>
,现在我可以捕捉到所有的换行符了。
我仍然无法理解为什么从 <input>
保存到 file.txt
时会出现换行符...
【讨论】:
以上是关于PHP 在使用 POST 时删除换行符的主要内容,如果未能解决你的问题,请参考以下文章