如果我想从Drupal 8中的twig实体字段输出html,那么|raw过滤器的替代方案是什么?
根据这张票的说法,|raw应该避免,但我不知道如何在twig中使用他们推荐的票据(Safestring/SafeMarkup)。
我有一个自定义内容实体,其字段定义如下:
$fields['internal_description'] = BaseFieldDefinition::create('text_long')
->setLabel(t('Internal description'))
->setSettings(array(
'max_length' => 1500,
))该字段存储来自CKEditor实例的HTML。现在,我想将它输出为一个小枝模板中的HTML。目前如果我打电话
{{ event.getExternalDescription }}我像预期的那样得到转义的HTML,但是这不是我想要的。如果我做了
{{ event.getExternalDescription | raw }}我得到了我想要的,也就是未转义的HTML。但是,由于在本例中没有以任何方式检查,所以我想知道如何使这个输出安全,并且仍然允许我的用户使用CKEditor输入内容?
发布于 2016-12-27 13:20:48
通常,您会在UI中配置字段的显示。
您可以使用render元素processed_text在代码中这样做。
$build = [
'#type' => 'processed_text',
'#text' => '<p>Hello world</p>',
'#format' => 'full_html',
];在twig中,您将使用以下代码而不是极其不安全的{{ event.getExternalDescription | raw }}:
{% set build = {
'#type': 'processed_text',
'#text': event.getExternalDescription,
'#format': 'full_html',
} %}
{{ build }}文本格式的安全性取决于文本过滤器的配置和字段的内容。将相同的安全性考虑因素应用于ckeditor中的文本格式。
发布于 2018-06-13 16:14:42
这种用法适用于我,可以在节点上的段落实体中进行长文本wysiwyg字段的呈现:
{{ item.entity.field_innerfieldname.value|t() }}特别是在节点中,field_paragraph_items是段落元素的集合:
{% for item in content['#node'].field_paragraph_items %}花了一段时间才弄明白。twig处理器\t()并没有被广泛地宣传。
另请参阅:
发布于 2021-12-15 16:14:30
在@HongPong回复之后(抱歉,我还不能发表评论),我发现以下几点对我是有帮助的:
{{ node.body.value|t }}注意,在“t”之后没有吹嘘!
在我使用简单的{{ node.body.value }}之前,我将HTML标记解析到网页上(例如'<p>'),而在网页中,代码被转义为AKA编码(例如'<p>')。
https://drupal.stackexchange.com/questions/223967
复制相似问题