Laravel Datatables助手转义HTML标签问题求助
解决Laravel Datatables取出HTML被转义的问题
方案一:在Datatables配置中指定原始列
这是最直接的解决方式,直接告诉Datatables哪些列包含原始HTML,不需要做转义处理:
return DataTables::of($yourDataQuery) // 定义需要展示HTML的列 ->addColumn('content', function ($record) { // 直接返回数据库中存储的原始HTML内容 return $record->html_content_column; }) // 指定该列为原始HTML,跳过转义 ->rawColumns(['content']) ->make(true);
如果你的列是模型的默认字段,不是通过addColumn新增的,也可以直接在rawColumns里指定字段名:
return DataTables::of(YourModel::query()) ->rawColumns(['html_content_column']) ->make(true);
方案二:排除指定列的转义
如果大部分列需要转义,只有少数列是HTML内容,可以用escapeColumns方法指定需要转义的列,剩下的列会自动保留原始内容:
return DataTables::of(YourModel::query()) // 只转义id、title这类非HTML列 ->escapeColumns(['id', 'title']) ->make(true);
方案三:处理数据库中已二次转义的内容
如果数据库里的HTML已经被二次转义(比如存储时用了htmlspecialchars),取出时需要先做反转义处理:
return DataTables::of($yourDataQuery) ->addColumn('content', function ($record) { // 反转义后再返回内容 return htmlspecialchars_decode($record->html_content_column); }) ->rawColumns(['content']) ->make(true);
方案四:前端层面解析HTML
如果后端已经返回了转义后的字符串,前端可以用html()方法将内容插入到div中,而不是用text():
// 假设在Datatables的回调中拿到了行数据row $('#target-div').html(row.content);
内容的提问来源于stack exchange,提问作者Hamit
相关产品推荐
相关产品推荐

