当我将样式的span保存到MySQL时,样式将被删除

时间:2012-03-18 13:20:55

标签: php codeigniter tinymce sanitization

我使用TinyMCE作为我的PHP / CodeIgniter CMS后端输入。但是,当我使用文本颜色时,某些代码不会保存,也不会显示正确的颜色。

我该如何解决这个问题?

提前致谢。

<span style="color: #ff00ff;">Some text</span>

变为

<span  #ff00ff;">Some text</span>

在数据库中


有些代码在这里。

在我的控制器中。

function _fields()
{
    $data = array(
       ....
        'content'          => $_POST['content'],
        ....
    );
    return $data;
}


function create()
{
    // We need TinyMCE, so load it
    $this->bep_assets->load_asset_group('TINYMCE');
    ...
    if ($this->input->post('name'))
    {
        $data = $this->_fields();
        $this->MKaimonokago->addItem($this->module,$data);
...

在我的模特中。

function addItem($module,$data,$return_id=FALSE)
{
    $module_table = 'omc_'.$module;
    ...
    $this->db->insert($module_table, $data);
    ...
}

3 个答案:

答案 0 :(得分:5)

可能你可以这样做(如果这是问题,因为tinyMce删除了一些元素/属性)

tinyMCE.init({
    mode : "exact",
    elements : "page_content",
    theme : "advanced",
    // You can use
    extended_valid_elements: "span[class|align|style]"
    // Or you can use
    verify_html : false
});

//如果verify_html设置为false,则以下行(tiny_mce_src.js内部)允许所有元素和属性

if (settings.verify_html === false)
    settings.valid_elements = '*[*]';

参考: tinyMce

关于SO的另一个参考。

答案 1 :(得分:3)

使用CodeIgniter,如果您全局启用 XSS过滤器(在config.php中设置),您会发现从所有表单输入中删除了HTML内联样式文本。

要解决此问题,您可以禁用全局XSS过滤并使用HTML Purifier等手动过滤您的TinyMCE表单输入,这样您就可以更好地控制您希望允许的元素和属性。

对于其余的表单输入,您仍然可以通过CodeIgniter的XSS过滤器运行它们 - 您只需手动执行它,如下所示:

$this->form_validation->set_rules('form_item_name', 'Field Name', 'required|xss_clean|strip_tags|trim');

答案 2 :(得分:0)

这是因为xss正在删除样式。我们可以使用codeigniter轻松禁用它。

$this->input->post('key', true); // Enable XSS Filter
$this->input->post('key', false); // Disable XSS Filter

谢谢。