Php MySQL斜杠和nl2br

Php MySQL斜杠和nl2br,php,mysql,newline,backslash,Php,Mysql,Newline,Backslash,我试图将从文本区域发布的HTML存储到数据库中。我在一个表单中有一个文本区域,我称之为message。处理它的PHP代码是: if(isset($_POST['submit'])){ if(isset($_POST['title']) && isset($_POST['message'])){ $title = $_POST['title']; $message = $_POST['message']; if(get_ma

我试图将从文本区域发布的HTML存储到数据库中。我在一个表单中有一个文本区域,我称之为message。处理它的PHP代码是:

if(isset($_POST['submit'])){
    if(isset($_POST['title']) && isset($_POST['message'])){
        $title = $_POST['title'];
        $message = $_POST['message'];

        if(get_magic_quotes_gpc()){         
            $title = stripslashes($title);
            $message = stripslashes($message);
        }

        $title = mysql_real_escape_string($title);
        $message = mysql_real_escape_string($message);

        $q = "INSERT INTO table (title,datetime,text) VALUES ('{$title}',NOW(),'{$message}')";
        $rows_affected = $db->exec($q);
        if($rows_affected > 0){
            echo "<p>Done.</p>";
        } else {
            echo "<p>Failed. </p>"; 
        }
    }
}
但似乎什么都不管用。有什么想法吗

$res = array();

$q = "SELECT title,datetime,text FROM table";
$res = $db->get_all($q);
if($res){
    foreach($res as &$result){
        $result['title'] = $result['title']; // Don't see the reason for stripslashes here
        $result['text'] = nl2br($result['text']);
    }       
}

echo "<pre>";
print_r($res);
echo "</pre>";
我做了三件事:

去掉斜线。他们一定不在那里。执行查询时,删除添加的斜杠mysql\u real\u escape\u字符串。 我在新行中使用了函数nl2br。既然已经内置了,为什么还要自己写呢? 我在foreach循环中的$result前面添加了一个&。如果我不这样做,只修改了浅拷贝,而不是变量本身。因此根本不会有任何变化。
为了检索数据,不需要使用str_replace/stripslashes


使用nl2br将\n转换为正确的HTML换行符。注意:如果要再次显示文本区域内的文本,例如用于编辑,则需要按原样输出文本。你想做的唯一一件事就是使用strip_标记来防止HTML被插入到你的输出中。

nikic所做的更常见的方式

您确实覆盖了临时$result变量,而您必须将修改后的变量写回数组。 给变量起个合理的名字。
此外,考虑使用HTMLPrimeCARS,如果是用户提供的文本。

是的,同样的问题。当这不起作用时,我就转而使用上面的方法。据我所知,nl2br只删除了\n,而不是\r\n。噢,您删除了这个问题。有人问我是否在保留CRLF的同时使用了nl2br.nl2br adds\r\n。为什么要担心额外的\r\n?您可以在文档中保留换行符而不使用标记。nl2br将转换\n和\r\n、\r\n\r和\r\nOK的所有组合,但问题是我想用s替换在文本区域中输入的这些换行符,这样当我回显html时,我们就可以在用户需要的位置断开。哇。是的,我在这一点上做得太快了。我要强调的一点是,nl2br会将第二个参数添加到\r\n前面的字符串中,或者如果第二个参数为false,则会添加到\r\n前面的字符串中,或者如Lekensteyn所指出的那样,添加到任何\r\n前面的字符串中。它不会将您的\n转换为正确的HTML换行符。此外,我在$result前面添加了一个&。猛敲这就是问题所在。非常感谢你!实际上你做了4件事:你留下了无用的“$result['title']=$result['title'];”线路就位:
$order = array("\\r\\n","\\n","\\r");
// and even
$order = array("\\\r\\\n","\\\n","\\\r");
if ($res = $db->get_all('SELECT title,datetime,text FROM table')){
    foreach ($res as &$result){
        $result['text'] = nl2br($result['text']);
    }       
}

echo "<pre>";
print_r($res);
echo "</pre>";
$res = array();

$q = "SELECT title,datetime,text FROM table";
$res = $db->get_all($q);
if($res){
    foreach($res as &$result){
        $result['title'] = $result['title']; // Don't see the reason for stripslashes here
        $result['text'] = nl2br($result['text']);
    }       
}

echo "<pre>";
print_r($res);
echo "</pre>";
foreach ($data as $key => $row){
  $data[$key]['text'] = nl2br($row['text']);
}