CKEditor+CodeIgniter配置后HTML标签无法正确提交至数据库问题
解决CKEditor HTML标签无法正确存入CodeIgniter数据库的问题
看来你在把CKEditor和CodeIgniter结合使用时,遇到了HTML标签没法正确存入数据库的问题,我来帮你梳理下几个关键排查点和解决办法:
1. 检查CodeIgniter的XSS过滤设置
CodeIgniter默认的XSS过滤会转义HTML字符,这很可能是问题根源:
- 打开
application/config/config.php,找到$config['global_xss_filtering'],如果它被设为TRUE,改成FALSE(如果需要对其他字段单独做XSS过滤,后续可以局部处理)。 - 若不想关闭全局过滤,针对CKEditor的内容字段,获取POST数据时要手动关闭该字段的XSS过滤:
// 第二个参数设为FALSE,不对该字段做XSS过滤 $editor_content = $this->input->post('editor_field_name', FALSE);
2. 移除不必要的HTML转义操作
你代码里注释的//$this->streams = 'htmlspecialchars',...这类操作一定要去掉!htmlspecialchars()会把<p>这类标签转成<p>实体,存到数据库后就不是真正的HTML标签了,完全没法正常解析。
3. 确认数据库字段类型
存储CKEditor生成的HTML内容时,字段类型要选TEXT或者LONGTEXT,别用VARCHAR——VARCHAR长度有限,容易截断内容,也不适合存储大段HTML。
4. 验证数据库插入代码
确保你在插入时传递的是未被转义的原始HTML内容:
比如用CodeIgniter的Active Record插入:
$data = array( 'title' => $this->input->post('title'), 'content' => $editor_content // 这里用刚才获取的未转义HTML ); $this->db->insert('your_table_name', $data);
Active Record会自动帮你处理SQL注入的安全问题,不需要手动转义内容,同时能保留完整的HTML标签。
5. 输出内容时的注意事项
当你从数据库取出内容展示时,不要对内容做htmlspecialchars()转义,直接输出即可:
// 视图文件里直接输出 echo $content;
这样浏览器才能正确解析HTML标签,显示格式化后的内容。
内容的提问来源于stack exchange,提问作者Edison Sarmiento
相关产品推荐
相关产品推荐

