nl2br()不会输出换行符,只是'n'

时间:2012-06-25 09:19:48

标签: php

这很简单,我的网站上有一个文本区域帖子,如果我输入:

line 1
line 2
line 3

进入它,输出:

line 1nline 2nline 3

我的插入代码是:

    $status = strip_tags(stripslashes(htmlentities(mysql_real_escape_string($_POST['status']))));
    $uid = strip_tags(stripslashes(htmlentities(mysql_real_escape_string($_POST['uid']))));

    //more stuff

        $sid = rndTxt(16);
        $status = nl2br($status);
        if (!get_magic_quotes_gpc()) {
            $status = addslashes($status);
        }


    $insert = mysql_query("INSERT INTO mingle_status (uid,sid,status,`timestamp`) VALUES ('$uid','$sid','$status',now())") or
    print mysql_error();

和我的输出代码:

while($st = mysql_fetch_assoc($statussql)) {
    $status = stripslashes($st['status']);
    $sid = $st['sid'];
    $td = $st['timestamp'];
?>
<div id="n">
<div id="statuses" class="<?php echo $sid; ?>">
<p><?php echo $status; ?></p>
<div id="statuscomadd" style="background:#E0E0E0;">
<a href="ld.php?uid=<?php $uid; ?>&pid=<?php echo $sid;?>&method=like">Like</a> <a href="ld.php?uid=<?php $uid; ?>&pid=<?php echo $sid;?>&method=dislike">Dislike</a><a href="#" id="time"><?php echo time_since($td) . " ago"; ?></a>
</div>  
</div>

非常感谢任何帮助!:)

3 个答案:

答案 0 :(得分:2)

你不需要在插入时使用nl2br(),你必须在html中显示时使用它

并且必须在插入

之前删除stripslashes

答案 1 :(得分:1)

插入时只需对值mysql_real_escape_string()执行操作。您只想更改数据(例如,当您要显示数据时使用htmlentities())。

还请考虑停止使用mysql_*函数获取新代码。它们已不再维护,社区已开始deprecation process。请参阅red box?相反,您应该了解prepared statements并使用PDOMySQLi。如果您无法决定,this article将有助于选择。如果您想学习,here is a good PDO tutorial

另一件事:你真的需要htmlentities()吗?因为imo更好的解决方案是使用htmlspecialchars()。否则所有 html实体都将被替换。

此外,我认为您不需要使用strip_tags(),因为您已经在使用htmlspecialchars()来保护您免受XSS攻击。

现在问题是因为您正在使用stripslashes()来打破\n换行符。我想你可以放弃那些add/stripslashes

答案 2 :(得分:0)

您使用strip_tags(stripslashes(htmlentities(mysql_real_escape_string())));删除\n

中的斜杠

只需使用mysql_real_escape_string()htmlentities( ,ENT_QUOTES)即可获得HTML。

此外,如果可以使用UTF-8编码而htmlspecialchars()代替htmlentities()htmlentities()转换每个具有HTML表示的字符,而htmlspecialchars()仅转换必要的字符。没有必要转换一切。请参阅:htmlentities vs htmlspecialchars