显示格式化文本


Show formatted text

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

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

他们在文本区域中编写新闻/消息/任何内容,当他们点击post时,下面的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");

然后调用视图来显示文本,但也没有运气。

输出如下文本:

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

nl2br-在字符串的所有换行符之前插入HTML换行符

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

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

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

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

这可以使用nl2br:来完成

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

使用nl2br函数,如下所示。

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

尝试添加nl2br调用。

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

您必须在htmlentities之后执行此操作,因为它可能会破坏您将"<"answers">"更改为entities的实际文本:

&lt; / &gt; 
$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

这是您的实际代码吗?

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

无需指定您定义的参数,将选项保留为默认值将是有益的,如下所示:

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

如果您想在输入文本区域后使用换行符,还需要调用nl2br将新行转换为HTML换行符。这必须在你打电话给像这样的htmlentities之后完成:

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

使用<pre>标记而不是<p>标记。