3

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

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

那么应该如何处理它以便输入是安全的,它不会允许显示任何 HTML,如何正确显示它等等?

这就是我运行当前代码时发生的情况。
第 1 步:
Textarea 输入:
ROW 1

第 3
行 第 4 行

第 6 行

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

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

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

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

任何指导将不胜感激。

4

1 回答 1

3

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

$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 时(进入数据库、进入浏览器、进入日志文件......),并且您用于转换数据的方法是取决于数据的去向

于 2013-04-19T15:15:09.237 回答