我有一个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");
在调用视图以显示文本之前,但也没有运气。
答案 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;”引诱:
< / >
答案 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>
标记。