首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL斜杠和nl2br

MySQL斜杠和nl2br
EN

Stack Overflow用户
提问于 2010-09-25 18:51:37
回答 3查看 5.7K关注 0票数 0

我正在尝试将从文本区域发布的HTML存储到数据库中。我在一个叫做"message“的表单中有一个文本区域。处理它的PHP代码是:

代码语言:javascript
复制
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 />。下面是我正在做的事情:

代码语言:javascript
复制
$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改成

代码语言:javascript
复制
$order = array("\\r\\n","\\n","\\r");
// and even
$order = array("\\\r\\\n","\\\n","\\\r");

但似乎什么都不起作用。有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-25 19:30:50

代码语言:javascript
复制
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函数。如果已经内置了,为什么还要自己写呢?
  • 我在foreach循环中的$result前面添加了一个&。如果我不这样做,那么只会修改浅层的副本,而不是变量本身。因此根本不会有任何变化。
票数 0
EN

Stack Overflow用户

发布于 2010-09-25 19:31:17

对于数据的检索,不需要使用str_replace/stripslashes。

代码语言:javascript
复制
$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被插入到输出中。

票数 0
EN

Stack Overflow用户

发布于 2010-09-25 19:43:21

尼基克更常用的方式

代码语言:javascript
复制
foreach ($data as $key => $row){
  $data[$key]['text'] = nl2br($row['text']);
}

您确实覆盖了临时$result变量,而您必须将修改后的变量写回到数组中。并给我们的变量起合理的名字。

此外,如果是用户提供的文本,请考虑使用htmlspecialchars()。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3793493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档