所以我对所有关于使用正确的换行符存储和显示textareas以及不允许任何HTML标记的主题感到困惑。
现在我正在逃避输入,然后将其存储为文本,然后尝试使用echo nl2br($ text)显示它;它仍然无法工作。
那么应该如何处理以便输入是安全的,它不允许显示任何HTML,如何正确显示它等等?
当我运行当前代码时会发生这种情况。
第1步:
Textarea输入:
第1行
行3 第4行
ROW 6
转义变量:
$ text = $ mysqli-> real_escape_string($ _ POST ['textarea']);
步骤2:
要插入到db中的SQL查询。存储在数据库中:
行1 \ r \ n \ r \ nROW 3 \ r \ nROW 4 \ r \ n \ r \ nRORO 6
步骤3:
使用SQL获取它,使用echo nl2br($ text)显示;结果为行ROW 1 \ r \ n \ r \ nROW 3 \ r \ nROW 4 \ r \ n \ r \ nRORO 6
我猜它的存储方式禁止使用nl2br,因为实际上并没有存储任何新行,只有\ r \ n等,我在这一段时间有点丢失而且它已经迟到所以......
任何指导都将不胜感激。
答案 0 :(得分: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(转到数据库,转到浏览器,转到日志文件......)和方法<用于转换数据的/ em>取决于数据发送的