Markdown 视频 / iframe 渲染完整修复
xiaobai 17小时前

2026-06-08 Markdown 视频 / iframe 渲染完整修复

本次围绕编辑器视频插入、二次编辑回显、文章详情页正文视频显示和视频展示尺寸做完整修复,重点解决 B 站 iframe 保存后实体化、再次编辑变成 <iframe ... "...、详情页只显示黑块以及宽屏下视频过宽的问题。

主要改动:

  1. 编辑回显实体化修复
  • 文件:route/post.php
  • 编辑帖子 GET 回显时,不再提前对正文执行 htmlspecialchars()
  • 改为使用 post_markdown_decode_entities_deep() 先还原历史多层实体,再交由模板 textarea 统一转义输出。
  • 避免保存后再次编辑时 iframe / video HTML 被重复转义成纯文本实体。
  1. Markdown 视频识别和实体解码增强
  • 文件:model/post.func.php
  • post_markdown_is_embed_video_url() 改为使用深度实体解码,兼容 && 等多层转义后的播放器地址。
  • post_markdown_safe_url()post_markdown_iframe_html()post_markdown_video_html() 继续统一走安全 URL 过滤。
  • 支持 video、B 站 iframe 代码、B 站播放器 URL,以及 mp4/webm/ogg 等视频直链。
  1. HTML 安全白名单补充视频能力
  • 文件:model/misc.func.php
  • HTML 白名单允许安全的 videosourceiframe 标签和必要属性。
  • 补充 / 修正 controlspreloadscrollingframeborderframespacingallowfullscreen 等属性规则。
  • 修复 allowfullscreen="true" 被重复规则覆盖的问题。
  1. 底层安全过滤器 iframe 硬编码修复
  • 文件:xiunophp/xn_html_safe.func.php
  • 原底层过滤器对 iframe/embed src 有额外硬编码,只允许旧的优酷播放器地址,导致 B 站 iframe 的 src 被清空,详情页只剩黑色容器。
  • 已改为只放行明确受支持的视频播放器地址:
  • player.bilibili.com/player.html?...
  • www..com/embed/...
  • player.youku.com/embed/...
  • 仍不允许任意 iframe 地址,避免重新放开通用 iframe 带来的安全风险。
  1. 编辑器前端预览同步
  • 文件:view/htm/post.htm
  • 前端预览支持从 iframe 代码中提取 src
  • 支持多层实体转义后的 iframe 识别。
  • 视频按钮可插入 video,预览层和服务端渲染规则保持一致。
  1. 文章详情页视频宽度优化
  • 文件:view/css/bootstrap-bbs.css
  • 视频和播放器 iframe 改为居中显示。
  • 最大宽度限制为 min(100%, 860px),避免宽屏正文区视频过宽。
  • iframe 高度由固定 420px 改为 aspect-ratio: 16 / 9 自适应。
  • 移除 iframe 固定最小高度,移动端和窄屏下按容器宽度自然缩放。

影响说明:

  • 不需要数据库结构变更。
  • 已保存为原始 iframe、实体化 iframe 或 video 的内容,在重新打开编辑页时会尽量还原为可编辑文本。
  • 历史帖子详情页会在展示时重新经过安全渲染;如果仍显示旧内容,优先清理 tmp/* 并重置 OPcache。
  • 本次只允许受支持的视频播放器 iframe,不恢复任意 iframe 嵌入能力。
 

 

欢迎大家加入QQ交流群:785017513

最新回复 (0)
全部楼主
返回
xiaobai
二级用户组
27
主题数
4
帖子数
扫码访问