记录未显示为已保存

时间:2014-08-07 12:03:05

标签: php mysql sanitize

这是我通过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; 
}

我正在做的事情非常糟糕,因为当一个段落保存到数据库然后检索时,所有段落都显示在一行中。

像这样的东西

&lt;p&gt;This is paragraph 1 &lt;/p&gt;<br /><br />&lt;p&gt;This is paragraph 2 &lt;/p&gt;

而不是

This is paragraph 1
This is paragraph 2

请指出问题。

3 个答案:

答案 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