そのため、YouTubeビデオの埋め込みを適切に許可し、エントリの保存時にそれを削除しないデフォルトのHTML Purifier構成をテストしていましたが、それでも正しく機能していません。 これは、iframe src URLがyoutubeかvimeoかを判断するために使用される正規表現が正しくなく、先頭のhttps:
部分を省略したyoutubeurlのエッジケースを考慮していないためだと思います。 URL。
これが発生しているのは、最初に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のnocookieURLも考慮します。 最後に、 .
(ドット)文字もエスケープされています。これは、文字だけでなく実際のドットと一致させたいためです。
また、正規表現内のこれらの.
(ドット)文字は、文字ではなくリテラルの.
文字と一致することを目的としているため、適切にエスケープする必要があると思います。 上記の正規表現ソリューションを更新して、それらを回避しました。
@ andris-sevcenkoは、この問題が発生したかどうかを確認するためにチェックインするだけです。 ありがとうございました。
@ sidm1983私は持っています。 このためのPRを提出してもよろしいですか?
これを修正する2.8.3をリリースしました。
新しいCraftプロジェクトのデフォルトのHTMLPurifier構成も更新しました。 config/htmlpurifier/Default.json
ファイルがある場合は、この変更を手動で行う必要があります: https :
@ andris-sevcenko&@ brandonkellyに感謝します。 申し訳ありませんが、その時点でチャンスがなかったため、PRを提出しませんでした。 それを整理してくれてありがとう。
@brandonkelly 、上記のコミットで行った変更についての簡単な質問。 ドット文字がエスケープされていないように見えます。つまり、単一のドットだけでなく、任意の文字に一致します。 これは意図的なものですか?
@brandonkellyは、正規表現のドット文字のエスケープに関する上記の私のコメントを見たかどうかを確認したかっただけです。 ありがとうございました。 😊🙏🏽