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

Lod*_*der 1 php joomla nl2br joomla2.5

在我的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;
}
Run Code Online (Sandbox Code Playgroud)

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

print stripslashes($shouts[$i]->msg);
Run Code Online (Sandbox Code Playgroud)

但是,当有人要输入以下内容时,这会引起问题:

test line 1
test line 2
Run Code Online (Sandbox Code Playgroud)

如果他们改行,则帖子提交后将显示为:

test line 1rntest line 2
Run Code Online (Sandbox Code Playgroud)

因此,我做了一些研究,意识到我必须使用nl2br()如下所示的方法:

print stripslashes(nl2br($shouts[$i]->msg));
Run Code Online (Sandbox Code Playgroud)

但是,它似乎无法解决问题。我也尝试在帮助器中创建另一个函数来替换它,preg_replace但这也无济于事。

谁能解释为什么添加后断行不起作用nl2br()以及如何解决?

Tyr*_*ron 6

尝试这种方式:

print nl2br(stripcslashes($shouts[$i]->msg));
Run Code Online (Sandbox Code Playgroud)

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

要不就:

print nl2br($shouts[$i]->msg);
Run Code Online (Sandbox Code Playgroud)

UPD: nl2br()功能替换\n<br />。问题是\n您的文本中没有,但是有n\\n。我认为,stripslashes()当您从基础数据库中获取数据时,无需使用,除非您已在基础数据库中对数据进行了认证。