简体   繁体   中英

nl2br() not working when displaying SQL results

On my Joomla module, we are using the following code to get shouts from the database

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;
}

and the following code to display it in the default.php

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

However this is causing problems when someone wants to input something like the following:

test line 1
test line 2

If they go onto a new line, the post displays like so after being submitted:

test line 1rntest line 2

So I did some research and realised I had to use nl2br() which I did as shown below:

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

however, it didn't seem to resolve the issue. I also tried creating another function in the helper to replace it using preg_replace but this didn't help either.

Can anyone explain why line breaking isn't working after adding nl2br() and how to fix it?

Try this way:

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

Pay attention to the stripcslashes() function, but not stripslashes()

Or just:

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

UPD: nl2br() function replaces \\n with <br /> . The problem is that you don't have \\n in your text, but have n or \\\\n . I think there is no need to use stripslashes() when you get data from base, except the situation when you have ecranized data in your base.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM