为什么 $_POST 从字符串中删除 HTML 标签?

Why $_POST is removing HTML tags from string?

我正在 PHP 5.6 使用 Fat Free Framework(如果它重要的话)并且有一个奇怪的问题。我像这样向服务器发送表单数据:

function submitForm(form) 
{
    var fd = new FormData();
    var file_data = isImageIncluded ? $('input[type="file"]')[0].files : [];
    for (var i = 0; i < file_data.length; i++) {
        fd.append("file_" + i, file_data[i]);
    }
    var other_data = $(form).serializeArray();
    $.each(other_data, function(key, input) {
        fd.append(input.name, input.value);
    });

    sendData(url, fd, form);
}

function sendData(url, data, form) 
{
    $.ajax({
        type: 'POST',
        url: url,
        data: data,
        contentType: false,
        processData: false,
        success: function(data) {
            console.log(data);
        }
    }
});

}

所以当我调试上面的代码时,我看到数据从所见即所得发送,带有 html 标签,例如 <b></b>.

问题出在PHP这边。方法如下:

public function editRelease()
{
    var_dump($_POST['description']);exit;
}

并且无法获取描述以显示字符串中的 html 标记。有人知道发生了什么事吗?

编辑

这是我的 headers 来自 Chrome 的屏幕截图。我标记了我所指的 object 。如图所示,html 标签将发送到服务器,所以我不确定为什么它没有显示在 $_POST 数组中。

编辑 2

这是我得到的响应的屏幕截图,对应于上面 headers 的屏幕截图:

有人见过吗?

对于那些想知道的人,我发现在我的 Fat Free Framework 变体中,称为 F3 Boilerplate,有一段代码剥离了标签。在它的 app.php 里面,我发现

// clean ALL incoming user input by default
$request = array();
foreach (array('GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'COOKIE') as $var) {
    $input = $f3->get($var);
    if (is_array($input) && count($input)) {
        $cleaned = array();
        foreach ($input as $k => $v) {
            $k = strtolower(trim($f3->clean($k)));
            $v = $f3->clean($v);
            if (empty($v)) {
                continue;
            }
            $cleaned[$k] = $v;
            $request[$k] = $v;
        }
        ksort($cleaned);
        $f3->set($var, $cleaned);
    }
}

它使用 $f3->clean() 从所有传入输入中删除标签,因此我不得不将其修改为白名单标签,如文档 http://fatfreeframework.com/base#clean.

中所述