所以我只是在测试默认的 HTML Purifier 配置,它现在允许正确嵌入 youtube 视频,并且不会在保存条目时将其删除,但它仍然无法正常工作。 我相信这是因为用于确定 iframe src URL 是 youtube 还是 vimeo 的正则表达式不太正确,并且没有考虑在 youtube url 中省略https:
开头部分的边缘情况网址。
发生这种情况是因为当您第一次嵌入 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。 最后, .
(点)字符也被转义了,因为我们希望它匹配一个实际的点而不是任何字符。
另外,我认为正则表达式中的那些.
(点)字符需要正确转义,因为目的是匹配文字.
字符而不是任何字符。 我已经更新了上面的正则表达式解决方案以逃避它们。
@andris-sevcenko 只是检查您是否已经看到此问题。 谢谢你。
@sidm1983我有。 你愿意为此提交 PR 吗?
刚刚发布的 2.8.3 解决了这个问题。
刚刚更新了新工艺项目的默认 HTML Purifier 配置。 如果您有config/htmlpurifier/Default.json
文件,则需要手动进行此更改: https :
感谢@andris-sevcenko 和@brandonkelly。 抱歉我没有为此提交 PR,因为我当时没有机会。 谢谢你整理出来。
@brandonkelly ,关于您在上述提交中所做更改的快速问题。 看起来点字符没有被转义,这意味着它们将匹配任何字符而不仅仅是单个点。 这是故意的吗?
@brandonkelly只是想检查一下您是否已经看到我上面关于在正则表达式中转义点字符的评论。 谢谢你。 😊🙏🏽