显示格式化文本

时间:2012-01-13 13:34:12

标签: php html

我有一个cms,其中我的网页管理员登录并发布各种新闻。

页面是希腊语,所以我使用utf-8编码。

他们在textarea中写下他们的新闻/消息/什么,当他们点击帖子时,以下php脚本准备文本,以便它可以存储在mysql数据库中。

$text = $_POST['text'];
$text = htmlentities($text, $quote_style = null, $charset = "UTF-8", $double_encode = null);
$text = mysql_real_escape_string( $text );

然后,当用户转到页面时,我从数据库中获取文本,并且我包含一个看起来像这样的视图文件:

<p><?php echo $text; ?></p>

但是当显示文本时,它看起来像一个文本块,没有换行。

如何准确显示帖子作者输入的文字?

我使用htmlentities的原因是我不希望在网站上发布新闻的人能够发布实际的HTML代码。如果这不是一个好主意,请告诉我。

我也尝试过使用:

$text = $row['text'];
$text = html_entity_decode($text, $quote_style = null, $charset = "UTF-8");

在调用视图以显示文本之前,但也没有运气。

8 个答案:

答案 0 :(得分:4)

输出如下文字:

  <div><?php echo nl2br($text); ?></div>

nl2br - Inserts HTML line breaks before all newlines in a string

答案 1 :(得分:1)

您需要nl2br()来插入HTML <br />换行符:

<p><?php echo nl2br($text); ?></p>

答案 2 :(得分:1)

当用户在表单中输入内容时,换行符在表单中显示为换行符,因为它的格式为纯文本。

当浏览器解析文本时,它不关心文本换行符,它关心的只是HTML换行符。因此,您需要将常规文本换行符转换为HTML换行符。

可以使用nl2br

完成此操作
<p><?php echo nl2br($text); ?></p>

答案 3 :(得分:1)

nl2br 功能用作here

<p><?php echo nl2br($text); ?></p>

答案 4 :(得分:0)

尝试添加nl2br电话。

$text = $_POST['text'];
$text = htmlentities($text, null, "UTF-8", null);
$text = nl2br($text);
$text = mysql_real_escape_string( $text );

你必须在htmlentities之后做,因为它可能会打破你实际的文字改变“&lt;”和“&gt;”引诱:

&lt; / &gt; 

答案 5 :(得分:0)

$text = $_POST['text'];
$text = mysql_real_escape_string( $text );

...save into database

$text = htmlentities($text, $quote_style = null, $charset = "UTF-8", $double_encode = null);

... show in view

答案 6 :(得分:0)

这是您的实际代码吗?

$text = htmlentities($text, $quote_style = null, $charset = "UTF-8", $double_encode = null);

没有必要指定您定义的参数,将选项保留为默认选项是有益的:

htmlentities($text, ENT_COMPAT | ENT_HTML401, 'UTF-8');

如果您希望在输入textarea后使用换行符,则还需要调用 nl2br 将新行转换为HTML换行符。这必须在您致电htmlentities之后完成:

$text = nl2br(htmlentities($_POST['text'], ENT_COMPAT | ENT_HTML401, 'UTF-8'));
$text = mysql_real_escape_string($text);

答案 7 :(得分:-1)

使用<pre>标记代替<p>标记。