PHP未在echo中显示textarea值中的换行符

时间:2018-09-23 08:36:15

标签: php string textarea line-breaks

我正在创建一个post_blog.php文件,用户将在其中逐个输入所有字段,例如post_titlepost_author等。

当用户编写包含许多段落的post_text时,我通过在php中使用post方法获取该文本,它以纯文本形式显示所有值。它不包含任何段落等。

这是代码:

<textarea rows="400" cols="100" name="post_text">
Enter post text here .. upto 5000 characters . 
</textarea>

在php中:

if()....

echo        $post_text = $_POST['post_text'];

演示输入post_text:

Enter post text here 
.. upto 
5000 
characters . 

输出:

Enter post text here .. upto 5000 characters . 

预期输出:

Enter post text here 
.. upto 
5000 
characters .

2 个答案:

答案 0 :(得分:1)

当用户按Enter键时,在字符串中插入但在html中不显示换行符\n。您应该将其转换为<br>才能显示为html。 str_replace()可以用字符串替换。

$newStr = str_replace("\n", "<br>", $str)

您还可以使用本机函数nl2br(),在注释中提到的@VictorFedorenko中,在字符串的所有换行符之前插入HTML换行符

$newStr = nl2br($str)

答案 1 :(得分:0)

您的问题不在php中;您的问题是HTML不接受空格(换行符,空格等)并将其显示为一个空格。有一些解决方案:

使用<pre>标签,它按原样显示文本:

<?php

...
echo '<pre>' . $post_text = $_POST['post_text'] . '</pre>';

使用CSS white-space: pre;定义,该定义与<pre>标记完全一样,不同之处在于它可以应用于任何元素,并且不能设置<pre>标记的样式:

<?php

...
echo '<div style="white-space: pre;">' . $post_text = $_POST['post_text'] . '</div>';

请参见MDN Docs about CSS' white-space declaration

最后一种解决方案是用<br>标签替换任何换行符,并用&nbsp;替换空格:

<?php

...
echo $post_text = str_replace(' ', '&nbsp;', str_replace('\n', '<br>', $_POST['post_text']));