在我的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()
之后换行不起作用以及如何修复它?
答案 0 :(得分:4)
尝试这种方式:
print nl2br(stripcslashes($shouts[$i]->msg));
注意stripcslashes()
功能,但不注意stripslashes()
或者只是:
print nl2br($shouts[$i]->msg);
UPD: nl2br()
函数将\n
替换为<br />
。问题是您的文字中没有\n
,但有n
或\\n
。我认为从基础获取数据时不需要使用stripslashes()
,除非你的基础中有数据的情况除外。