首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TYPO3 11内容元素纯文本<style>

TYPO3 11内容元素纯文本<style>
EN

Stack Overflow用户
提问于 2021-12-27 17:00:00
回答 1查看 411关注 0票数 1

TYPO3 11.5.4

我想在页面中添加一个简单的HTML内容元素,例如:

代码语言:javascript
复制
<style type="text/css">
  h1#testheader { font-weight: bold; }
</style>
<h1 id="testheader">
  Header
</h1>

(作为一个简化的例子)

但呈现的输出是:

代码语言:javascript
复制
<style type="text/css"> h1#testheader { font-weight: bold; } </style>
Header

我认为这种风格是允许的,因为我设置了:

代码语言:javascript
复制
lib.parseFunc.allowTags = ...,style,...
lib.parseFunc_RTE.allowTags = ...,style,...

但不起作用。设置

代码语言:javascript
复制
lib.parseFunc.htmlSanitize = 0

有帮助,但是否有更好的东西允许<style>在纯HTML内容元素?

编辑:查看DB条目,html标记没有编码,所以没有"<“或">",而不是"<”和">“,所以这不是RTE的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-29 18:48:42

经过更多的研究(再投资几个小时),我得出的结论是,唯一的方法是扩展HTMLSanitizer。

该解决方案使用了以下来源:

https://punkt.de/de/blog/2021/htmlsanitizer-in-typo3.html https://docs.typo3.org/c/typo3/cms-core/main/en-us/Changelog/9.5.x/Important-94484-IntroduceHTMLSanitizer.html https://gist.github.com/ohader/2239dab247e18d23e677fd1b816f4fd5

支持<style><script><iframe>的完整解决方案如下所示。

尽管如此,我还是不能允许使用这种方法的<font>

它在本地站点包(gpcf_theme)中实现,并使用composer。

添加<style><script><iframe>

代码语言:javascript
复制
lib.parseFunc.allowTags = ... style, ..., iframe, script, ...

在站点包的TypoScript部分中。

style似乎是标准的,并且已经是这个列表的一部分。

到本地站点包的路径是:

代码语言:javascript
复制
local_packages/gpcf_theme

与它的符号链接来自:

代码语言:javascript
复制
public/typo3conf/ext/gpcf_theme -> ../../../local_packages/gpcf_theme

以下是重要的文件更改:

local/gpcf_theme/Composer.json:

代码语言:javascript
复制
{
        "name": "oheil/gpcf_theme",
        ...
        "autoload": {
                "psr-4": {
                        "Oheil\\GpcfTheme\\": "Classes/"
                }
        },
        ...
}

local_packages/gpcf_theme/ext_localcon.php:

代码语言:javascript
复制
<?php
defined('TYPO3_MODE') || die();

...
$GLOBALS['TYPO3_CONF_VARS']['SYS']['htmlSanitizer']['default'] = \Oheil\GpcfTheme\MyDefaultBuilder::class;
...

local_packages/gpcf_theme/Classes/MyDefaultBuilder.php

代码语言:javascript
复制
<?php

namespace Oheil\GpcfTheme;

use TYPO3\CMS\Core\Html\DefaultSanitizerBuilder;
use TYPO3\HtmlSanitizer\Behavior;
use TYPO3\HtmlSanitizer\Behavior\Attr;
use TYPO3\HtmlSanitizer\Behavior\Tag;

class MyDefaultBuilder extends \TYPO3\CMS\Core\Html\DefaultSanitizerBuilder
{
    protected function createBehavior(): \TYPO3\HtmlSanitizer\Behavior
    {
        // https://docs.typo3.org/c/typo3/cms-core/main/en-us/Changelog/9.5.x/Important-94484-IntroduceHTMLSanitizer.html

        return parent::createBehavior()
                ->withName('common')
                ->withTags(
                        (new Tag(
                                'style',
                                Tag::ALLOW_CHILDREN + Behavior::ENCODE_INVALID_TAG
                        ))->addAttrs(
                                (new Attr('type')),
                                ...$this->globalAttrs
                        ),
                        (new Tag(
                                'iframe',
                                Tag::ALLOW_CHILDREN
                        ))->addAttrs(
                                ...array_merge(
                                        $this->globalAttrs,
                                        [$this->srcAttr],
                                        $this->createAttrs('scrolling', 'marginwidth', 'marginheight', 'frameborder', 'vspace', 'hspace', 'height', 'width')
                                )
                        ),
                        (new Tag(
                                'script',
                                Tag::ALLOW_CHILDREN
                        ))->addAttrs(
                                ...array_merge(
                                        $this->globalAttrs,
                                        [$this->srcAttr]
                                )
                        ),
                        // more tags...
        );
    }
}

当然,在这些更改之后,您需要清除TYPO3缓存,并且(这里不确定)您需要这样做:

代码语言:javascript
复制
composer remove "oheil/gpcf_theme"
composer require "oheil/gpcf_theme"

上面的内容现在正在起作用,但我仍然很高兴能让任何专家给出更多的关于哪里出了问题或者可以做得更好,也许更容易的见解?

为什么这不适用于<font>呢?示例:

代码语言:javascript
复制
<font class="font713099">Some Text</font>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70498334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档