You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony+FullCalendar:如何渲染含HTML标签的日程标题

解决Symfony中FullCalendar解析HTML标签的问题

问题现状

数据库中课程描述字段包含HTML标签,但当前FullCalendar直接将这些标签以纯文本形式显示,无法解析为页面结构。

解决方案

要让FullCalendar正确渲染HTML标签,需利用FullCalendar的eventContent自定义事件内容渲染逻辑,具体步骤如下:

1. 修改Twig中的FullCalendar配置

保留原有的事件数据传递逻辑,添加eventContent回调函数来手动渲染带HTML的内容:

<script src='https://cdn.jsdelivr.net/npm/fullcalendar@6.1.11/index.global.min.js'></script>
<script>
    document.addEventListener('DOMContentLoaded', function() {
        var calendarEl = document.getElementById('calendar');
        var calendar = new FullCalendar.Calendar(calendarEl, {
            initialView: 'listWeek',
            events: {{ data|raw }},
            // 自定义事件内容渲染,解析HTML标签
            eventContent: function(info) {
                var contentContainer = document.createElement('div');
                // 将带HTML的内容插入容器,浏览器自动解析标签
                contentContainer.innerHTML = info.event.title;
                return { domNodes: [contentContainer] };
            }
        });
        calendar.render();
    });
</script>

2. (可选)添加HTML内容安全过滤

如果课程描述内容来自用户输入,需防范XSS攻击。可以使用Symfony的HtmlSanitizer组件清理危险标签:

第一步:安装组件

composer require symfony/html-sanitizer

第二步:修改控制器代码

use Symfony\Component\HtmlSanitizer\HtmlSanitizerInterface;

public function getScheduleFromCalendar(LessonRepository $lessonRepository, HtmlSanitizerInterface $sanitizer)
{
    $groupSchedule = $lessonRepository->findGroupLessons('КН-1-4М');
    $lessonsList = [];
    foreach ($groupSchedule as $lesson) {
        if ($lesson->getLessonContent()) {
            // 清理HTML,仅保留安全标签(如b、i、p、br等)
            $sanitizedContent = $sanitizer->sanitize($lesson->getLessonContent());
            $lessonsList[] = [
                'start' => $lesson->getLessonStart()->format('Y-m-d H:i:s'),
                'end' => $lesson->getLessonEnd()->format('Y-m-d H:i:s'),
                'title' => $sanitizedContent,
            ];
        }
    }
    $data = json_encode($lessonsList);

    return $this->render('schedule/index.html.twig', compact('data'));
}

原理说明

FullCalendar默认会将title字段作为纯文本处理,通过eventContent回调,我们可以直接操作DOM元素,将带HTML的内容插入到页面中,让浏览器自动解析标签结构。安全过滤步骤则是为了避免恶意HTML代码带来的安全风险。

内容的提问来源于stack exchange,提问作者Вадим

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 11:52:35