MySQL斜杠和nl2br

时间:2010-09-25 10:51:37

标签: php mysql newline backslash

我正在尝试将从textarea发布的HTML存储到数据库中。我在表单中有一个textarea,我称之为“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>"; 
        }
    }
}

我遇到的问题是检索此问题并将换行符转换为<br />。这就是我在做的事情:

$res = array();

$order = array("\r\n","\n","\r");
$replace = '<br />';

$q = "SELECT title,datetime,text FROM table";
$res = $db->get_all($q);
if($res){
    foreach($res as $result){
        $result['title'] = stripslashes($result['title']);
        $result['text'] = str_replace($order, $replace, stripslashes($result['text']));
    }       
}

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

我无法摆脱信息中那些讨厌的\r\n。我尝试将$order更改为

$order = array("\\r\\n","\\n","\\r");
// and even
$order = array("\\\r\\\n","\\\n","\\\r");

但似乎没有任何效果。有什么想法吗?

3 个答案:

答案 0 :(得分:0)

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

我做了三件事:

  • 删除stripslashes。他们一定不能在那里。执行查询时将删除添加的斜杠mysql_real_escape_string
  • 我使用函数nl2br作为新行。如果它已经内置,为什么要自己写点什么?
  • 我在&循环中的$result前面添加了foreach。如果我不这样做,只修改浅拷贝,而不是变量本身。因此根本不会有任何改变。

答案 1 :(得分:0)

要检索数据,您无需使用str_replace / stripslashes进行操作。

$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>";

使用nl2br将您的\ n转换为正确的HTML换行符。 (注意:如果要再次显示文本区域内的文本,例如进行编辑,则需要按原样输出“文本”)。您唯一想做的就是使用strip_tags来阻止HTML插入到输出中。

答案 2 :(得分:0)

nikic做的更常见的方式

foreach ($data as $key => $row){
  $data[$key]['text'] = nl2br($row['text']);
}

你确实覆盖了你的临时$ result变量,而你必须将修改后的变量写回数组。 并为我们的变量提供合理的名称 另外,如果是用户提供的文本,请考虑使用htmlspecialchars()。