这是我通过php表单清理数据输入到数据库
function sanitize_input($data){
global $connect;
$data = htmlspecialchars($data);
$data = trim($data);
$data = nl2br($data);
$data = mysqli_real_escape_string($connect, $data);
return $data;
}
输出
function sanitized_output($data){
$data = htmlspecialchars($data);
$data = strip_tags($data, '<p><a>') ;
$data = str_replace(array('\r\n', '\n\r'),'',$data);
return $data;
}
我正在做的事情非常糟糕,因为当一个段落保存到数据库然后检索时,所有段落都显示在一行中。
像这样的东西
<p>This is paragraph 1 </p><br /><br /><p>This is paragraph 2 </p>
而不是
This is paragraph 1
This is paragraph 2
请指出问题。
答案 0 :(得分:0)
尝试从两个函数中删除 htmlspecialchars()
函数。然后查看结果。
答案 1 :(得分:0)
尝试使用以下所有此功能删除所有标签
$data = htmlspecialchars($data);
$data = strip_tags($data, '<p><a>') ;
$data = str_replace(array('\r\n', '\n\r'),'',$data);
使用此
function sanitized_output($data){
$data = nl2br($data);
return $data;
}
答案 2 :(得分:0)
作为一般规则,我喜欢在保存数据时完成所有工作。您在输出数据时很少想格式化数据,因为您将数据保存一次并多次输出。
使用global
是另一个坏主意。将变量作为参数注入函数。
所以让我们重写一下这些功能
function sanitize_input($data, $connect){
$data = strip_tags($data, '<p><a>');
$data = mysqli_real_escape_string($connect, nl2br(trim($data)));
return $data;
}
通过这种方式,您可以免除对sanitized_output
的需求。没有htmlspecialchars