手动保存Drupal节点字段时如何应用Ckeditor的HTML过滤规则
解法
你之前调用过滤器process方法得到相反结果的原因是:该方法属于内容渲染阶段的过滤逻辑,默认basic_html格式的允许标签列表中仅包含<em>、<strong>,没有<i>、<b>,所以会直接删除这两个标签。你需要的是和手动保存节点一致的入库前预处理逻辑,应该调用文本格式的preProcess方法,该方法会先执行你配置的标签转换规则(<i>转<em>、<b>转<strong>等),再返回合规的HTML内容。
正确实现代码如下:
// 原始待导入HTML $raw_html = '<p><i>Italic text</i> and some <b>bold</b> text</p>'; $text_format_id = 'basic_html'; // 加载对应文本格式配置 $filter_format = \Drupal\filter\Entity\FilterFormat::load($text_format_id); // 执行入库前预处理,完成标签转换、HTML修正等操作 $processed_html = $filter_format->preProcess($raw_html, 'nl'); // 将处理后的内容写入字段 $node->set('field_some_html', [ 'value' => $processed_html, 'format' => $text_format_id ]); $node->save();
执行上述代码后存入字段的内容就和手动编辑保存的结果完全一致,渲染时<em>、<strong>标签都会正常保留生效。
内容的提问来源于stack exchange,提问作者vrijdenker
相关产品推荐
相关产品推荐

