使用换行符安全地存储textarea输入并保留换行符

时间:2015-01-05 12:59:01

标签: php mysqli textarea nl2br

我将用户提交的演示文稿作为TEXT字段存储在数据库中时出现问题。 不允许任何HTML ,但应保留换行符

例如,如果用户使用textarea作为输入法从表单提交这样的演示文稿:

这是第1行

这是第3行 这是第4行

它应该完全相同地输出并清理过程中任何HTML的输入。

存储过程:

   if (isset($_POST['presentation'])) {
        $presentation = $purifier->purify($_POST['presentation']);
        $presentation = $mysqli->real_escape_string($presentation);
        if (strlen($presentation) > 1000) {
            return 2;
        }
    }
    else {
        $presentation = null;
    }

    if ($update_stmt = $mysqli->prepare("UPDATE user SET user_presentation = ?
                                         WHERE user_id = ?")) {
        $update_stmt->bind_param('ss', $presentation, $user_id);
    }
    if ($update_stmt->execute() == false) {
        $success = 0;
    }
    $update_stmt->close();

获取后输出:

<p><?php echo nl2br($profile['presentation']); ?></p>    

它存储在数据库中:

This is line 1\r\n\r\nThis is line 3\r\nThis is line 4

并在页面上显示为:

This is line 1rnrnThis is line 3rnThis is line 4

我想要的是要显示的演示文稿,因为它是由用户提交的,其中保留了新行,清除了任何HTML并且可以安全地存储在数据库中

我已经尝试过strip_tags,stripcslashes等,但我仍然无法让它工作..

有人可以提供帮助吗?

提前致谢。

1 个答案:

答案 0 :(得分:2)

在将字符串传递给nl2br()之前,您可以使用str_replace将它们转换为各自的转义序列。这是一个例子:

$profile = nl2br(str_replace('\\r\\n', "\r\n", $profile['presentation']));