我有一个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的实际文本:
< / >
$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>
标记。