删除Imperavi Redactor中的空标签

问题描述:

在Yii 2框架中使用Imperavi Redactor。删除Imperavi Redactor中的空标签

当没有文字输入时,Imperavi Redactor产生这个标记:<p><br></p>。 对于每个换行符,都会附加此标记。

我想删除它,因为没有办法通过RequiredValidator来验证此类内容。 我想在beforeValidate()事件中进行删除操作,并检查是否输入了任何文本。 如果除空标签,空格和换行符之外没有文本,则不允许保存。 否则,内容应保存在初始状态。

它可以在preg_replace的帮助下实现,但我不确定它是否是由Redactor生成的唯一变体。即使是这种解决方案在切换选项的情况下(例如,将paragraphize选项设置为false),更新或将所见即所得(WYSIWYG)更改为TinyMCE或CKEditor等等,这种解决方案的唯一变化方式也是如此。

例如,如果它将是<p><br/></p><p>&nbsp;</p>,正则表达式将失败。 另外我想修整空格,例如<p> <br></p>

在Redactor中是否有选项可以做到这一点? removeEmpty选项没有帮助。

我尝试过使用AutoFormat.RemoveEmpty选项的HTML净化器,结果为<p><br/></p>(对于内容<p></br></p>)。也许我们需要指定自定义模式或标签列表,究竟应该在段落内删除哪些内容。

实测此解决方案:

use yii\helpers\HtmlPurifier; 

$text = HtmlPurifier::process($model->text, [ 
    'HTML.ForbiddenElements' => ['p', 'br', '&nbsp;'], 
]);