nl2br()在显示SQL结果时不起作用

时间:2012-11-16 03:51:33

标签: php joomla joomla2.5 nl2br

在我的Joomla模块上,我们使用以下代码从数据库中获取呼叫

function getShouts($number, $timezone, $message) {
    $shouts = array();
    $db = JFactory::getDBO();
    $query = $db->getQuery(true);
    $query->select('*')
    ->from('#__shoutbox')
    ->order('id DESC');
    $db->setQuery($query , 0 , $number);
    $rows = $db->loadObjectList();
    $i=0;
    foreach ( $rows as $row ) {
        $shouts[$i]->id = $row->id;
        $shouts[$i]->name = $row->name;
        $shouts[$i]->msg = $row->msg;
        $i++;
    }
    return $shouts;
}

以及以下代码将其显示在 default.php

print stripslashes($shouts[$i]->msg);

然而,当有人想要输入如下内容时,这会导致问题:

test line 1
test line 2

如果他们进入新行,帖子在提交后会显示如下:

test line 1rntest line 2

所以我做了一些研究,发现我必须使用nl2br(),如下所示:

print stripslashes(nl2br($shouts[$i]->msg));
然而,它似乎没有解决问题。我还尝试在帮助器中创建另一个函数来使用preg_replace替换它,但这也无济于事。

有人可以解释为什么在添加nl2br()之后换行不起作用以及如何修复它?

1 个答案:

答案 0 :(得分:4)

尝试这种方式:

print nl2br(stripcslashes($shouts[$i]->msg));

注意stripcslashes()功能,但不注意stripslashes()

或者只是:

print nl2br($shouts[$i]->msg);

UPD: nl2br()函数将\n替换为<br />。问题是您的文字中没有\n,但有n\\n。我认为从基础获取数据时不需要使用stripslashes(),除非你的基础中有数据的情况除外。