逐步存储textarea mysql php

Posted

技术标签:

【中文标题】逐步存储textarea mysql php【英文标题】:Step by step storing textarea mysql php 【发布时间】:2013-04-13 00:38:35 【问题描述】:

所以我对所有关于使用正确换行符存储和显示文本区域以及不允许任何 html 标记的主题感到困惑。

现在我正在转义输入,然后将其存储为文本,然后尝试使用 echo nl2br($text); 显示它但它仍然行不通。

那么应该如何处理才能保证输入安全,不允许显示任何HTML,如何正确显示等等?

这就是我运行当前代码时发生的情况.. 第 1 步: 文本区域输入: 第 1 行

第 3 行 第 4 行

第 6 行

转义变量:$text = $mysqli->real_escape_string($_POST['textarea']);

第 2 步: 要插入数据库的 SQL 查询。在数据库中存储为: 第 1 行\r\n\r\n第 3 行\r\n第 4 行\r\n\r\n第 6 行

第 3 步: 用 SQL 获取它,用 echo nl2br($text) 显示;结果为 ROW 1\r\n\r\nROW 3\r\nROW 4\r\n\r\nROW 6

我猜它的存储方式禁止使用 nl2br,因为实际上并没有存储任何换行符,而只有 \r 等,我有点迷失了这一点,而且已经很晚了......

任何指导将不胜感激。

【问题讨论】:

【参考方案1】:

在你的情况下 - 因为你想从输入中删除任何标记......

$text = strip_tags($_POST['textarea']);
$text = $mysqli->real_escape_string($text);
mysqli->query("INSERT INTO yourtable (content) VALUES ('$text')");

...但是当您想再次将其输出到浏览器时 - 您仍然需要适当地对其进行转义....

if ($result = $mysqli->use_result()) 
        while ($row = $result->fetch_assoc()) 
            print "<div>" . nl2br(htmlentities($row['content'])) . "</div>";
        

您对 php 中的数据进行任何清理的唯一时间是在它离开 PHP 时(进入数据库、进入浏览器、进入日志文件......)和 方法 您用于转换数据的方式取决于数据的去向

【讨论】:

啊哈,我明白了。感谢您的快速回复并为我解决问题!我将继续使用这个例子,希望事情会像我不希望的那样。

以上是关于逐步存储textarea mysql php的主要内容,如果未能解决你的问题,请参考以下文章

使用 mysql_real_escape_string 存储后保持 textarea 输入格式

将 textarea 内容保存到 mysql 然后在页面上正确显示

如何从 mysql 获取数据到 ckeditor textarea?

带有条件检查的 PHP MySQL PDO TextArea Where 子句

php将textarea内容上传到mysql表中

<script> 标签未在 textarea 中处理