Redactor: 保存条目后删除了 Youtube iframe 'src' 参数

创建于 2020-10-13  ·  7评论  ·  资料来源: craftcms/redactor

描述

所以我只是在测试默认的 HTML Purifier 配置,它现在允许正确嵌入 youtube 视频,并且不会在保存条目时将其删除,但它仍然无法正常工作。 我相信这是因为用于确定 iframe src URL 是 youtube 还是 vimeo 的正则表达式不太正确,并且没有考虑在 youtube url 中省略https:开头部分的边缘情况网址。

重现步骤

  1. 转到 youtube 并获取任何视频 URL(例如 https://www.youtube.com/watch?v=roY6H75d9wE)
  2. 使用 redactor 中的视频嵌入图标将上述 youtube 视频添加到编辑器。
  3. 保存条目
  4. 返回并编辑相同的条目
  5. 您会看到 youtube 视频缩略图消失了。 如果您查看编辑器中的 HTML,就会发现 iframe 本身就在那里,只是缺少 'src' 参数。

解决方案

发生这种情况是因为当您第一次嵌入 youtube 视频时,生成的 HTML 如下所示:

<figure><iframe style="width: 500px; height: 281px;" src="//www.youtube.com/embed/roY6H75d9wE" frameborder="0" allowfullscreen=""></iframe></figure>

如上所示, src参数以//开头,而不是https://

结果,上面的src值被删除,因为当前使用的正则表达式没有考虑到丢失方案的可能性:
https://github.com/craftcms/redactor/blob/2fff5171f89538e84921119e8af533e6379ad24b/src/Field.php#L1019

这是我过去使用过的适用于这种边缘情况的正则表达式:

'URI.SafeIframeRegexp' => '%^(https?:)?//(www\.youtube(?:-nocookie)?\.com/embed/|player\.vimeo\.com/video/)%',

请注意https?:部分周围的附加括号和问号将其标记为可选。 它还解释了 youtube 的 nocookie URL。 最后, . (点)字符也被转义了,因为我们希望它匹配一个实际的点而不是任何字符。

附加信息

  • 工艺版本:3.5.12.1
  • PHP 版本:7.3
  • 数据库驱动程序和版本:pgsql 11
  • 插件和版本:redactor 2.8.1

所有7条评论

另外,我认为正则表达式中的那些. (点)字符需要正确转义,因为目的是匹配文字.字符而不是任何字符。 我已经更新了上面的正则表达式解决方案以逃避它们。

@andris-sevcenko 只是检查您是否已经看到此问题。 谢谢你。

@sidm1983我有。 你愿意为此提交 PR 吗?

刚刚发布的 2.8.3 解决了这个问题。

刚刚更新了新工艺项目的默认 HTML Purifier 配置。 如果您有config/htmlpurifier/Default.json文件,则需要手动进行此更改: https :

感谢@andris-sevcenko 和@brandonkelly。 抱歉我没有为此提交 PR,因为我当时没有机会。 谢谢你整理出来。

@brandonkelly ,关于您在上述提交中所做更改的快速问题。 看起来点字符没有被转义,这意味着它们将匹配任何字符而不仅仅是单个点。 这是故意的吗?

@brandonkelly只是想检查一下您是否已经看到我上面关于在正则表达式中转义点字符的评论。 谢谢你。 😊🙏🏽

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

lukeyouell picture lukeyouell  ·  26评论

timoteh picture timoteh  ·  17评论

lindseydiloreto picture lindseydiloreto  ·  10评论

stenvdb picture stenvdb  ·  16评论

sandissauka picture sandissauka  ·  16评论