2012-01-13 81 views
0

我有一个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); 

然后,当用户进入页面,我从数据库读取文本,我包括whick看起来像这样一个视图文件:

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

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

我能做些什么来显示文章的完整内容?

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

我也尝试使用:

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

调用视图来显示文本之前,但没有运气那里。

回答

1

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

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

尝试添加nl2br电话。

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

必须ヶ辆之后做的,因为它可以打破你实际的文本改变“<”和“>”来的entites:

&lt;/&gt; 
+0

在写入数据库之前替换换行符是一个坏主意。如果你想编辑那个文本,你需要在输出到textarea之前替换'
'。 – Corubba 2012-01-13 13:45:38

+0

@BloodyWorld你说得对。 – WoLfulus 2012-01-13 13:55:48

1

当用户输入了一些成一种形式,线中断显示为表格中的换行符,因为它的格式为纯文本。

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

这可以通过使用nl2br做到:

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

所以换行符实际上是存储的,但浏览器不能识别它们,使用上面的函数会做到这一点? – ppp 2012-01-13 13:40:17

+0

是的。您可以通过查看生成的页面的源代码来确认。在那里,你会看到换行符依然存在。 – kba 2012-01-13 13:41:26

-1

使用,而不是<p>标签<pre>标签。

+0

这也会在大多数浏览器中默认地改变外观(这意味着他将不得不使用css重新格式化文本),并且根据上下文,它可能在语义方面不正确。 – Connum 2012-01-13 13:40:55

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 
0

这是你的实际代码?

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

有没有必要指定要定义什么参数,这将有利于保留选项为默认值,像这样:

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

如果你想换行工作在输入到textarea后,您还需要拨打nl2br将新行转换为HTML换行符。这必须您的来电后需做ヶ辆,像这样:

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

他的调用工作,因为赋值运算符返回分配的值。它不是这样做的正确方法,但有时它可能很有用但很混乱。如:**电话($ a = 1234); if($ a == 1234){echo“i'm here”; } **这将1234传递给“调用”函数,并输入“if”如果我没有错。 – WoLfulus 2012-01-13 13:41:37

+0

@WoLfulus好点,在PHP破碎的日子里回想起来。但即便如此,忽略默认标志也不是好事。更新。编辑:是的,你没有错,var_dump(($ a ='c'));产生(字符串)'c'。 – 2012-01-13 13:44:01

+0

我的edtor(bluefish)函数将所有传递给它们的变量预先键入为NULL。我只是没有改变价值。我将搜索htmlentities文档中提到的语法。 – ppp 2012-01-13 13:52:02

1

使用nl2br功能here

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