PHP nl2br,需要双重补充

时间:2012-10-14 15:40:06

标签: php nl2br

我有这段代码

       require_once("../Packages/Connection.php");
       $create_object = mysql_query("SELECT * FROM `Articles` WHERE `group` = 'News' ORDER BY `id` DESC;");

      while($row=mysql_fetch_array($create_object))
        {
        $time = $row[time];
        $date = date("H:i M jS o ",$time);
        print "<form action='Update.php' method='post' float:left;>

                <input hidden='hidden' name='articleId' value='$row[id]'>

                <input hidden='hidden' name='method' value='update'>

                <textarea name='articleText' rows='3' cols='25'>$row[text]</textarea>
                <br />  
                <input type='submit' value=' Update '>
            </form><br />
            <form action='Update.php' method='post'>

                <input hidden='hidden' name='articleId' value='$row[id]'>

                <input hidden='hidden' name='method' value='delete'>

                <input type='submit' value=' Delete ' onClick='return confirmDelete()'float:left;'>

            </form>     
         <hr><br />";
         }  

它输出文本正常,它将新行更改为<br />,但每次更新时,它都会添加一个新的,所以我第一次输入如下文本:

Hi
My name is Jesper

it outputs Hi <br />
My name is Jesper to the database

and second time if i want to change something, like the name..
Hi <br /><br />
My name is JapSeyz

并继续添加<br />'s..如何将其限制为只有一个?

2 个答案:

答案 0 :(得分:2)

那是因为在将文本存储到数据库之前使用nl2br。去看看那里......

正确的方法是仅在查看时转义数据(例如nl2br)。数据库中的数据应该清晰,没有任何关于为特定目的逃避的修改。

<textarea>元素中,新行已经处理,无需在其中插入<br>个元素。

所以在存储数据时不要使用nl2br,只有在页面上打印时才使用它(不在表单元素中)。

答案 1 :(得分:0)

我用我自己的函数修复了nl2br bug:

if (!function_exists('snl2br')) {
    function snl2br( $input ) {
        return preg_replace('~(\r?\n\s?)+?~',"<br>",$input);
    }
}

我希望它会对你有所帮助。