Redactor: エントリを保存した後、Youtubeiframeの「src」パラメータが削除されました

作成日 2020年10月13日  ·  7コメント  ·  ソース: craftcms/redactor

説明

そのため、YouTubeビデオの埋め込みを適切に許可し、エントリの保存時にそれを削除しないデフォルトのHTML Purifier構成をテストしていましたが、それでも正しく機能していません。 これは、iframe src URLがyoutubeかvimeoかを判断するために使用される正規表現が正しくなく、先頭のhttps:部分を省略したyoutubeurlのエッジケースを考慮していないためだと思います。 URL。

再現する手順

  1. YouTubeにアクセスして、ビデオのURLを取得します(例:https://www.youtube.com/watch?v = roY6H75d9wE)
  2. エディターのビデオ埋め込みアイコンを使用して、上記の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のnocookieURLも考慮します。 最後に、 . (ドット)文字もエスケープされています。これは、文字だけでなく実際のドットと一致させたいためです。

追加情報

  • クラフトバージョン:3.5.12.1
  • PHPバージョン:7.3
  • データベースドライバーとバージョン:pgsql 11
  • プラグインとバージョン:redactor 2.8.1
bug

全てのコメント7件

また、正規表現内のこれらの. (ドット)文字は、文字ではなくリテラルの.文字と一致することを目的としているため、適切にエスケープする必要があると思います。 上記の正規表現ソリューションを更新して、それらを回避しました。

@ andris-sevcenkoは、この問題が発生したかどうかを確認するためにチェックインするだけです。 ありがとうございました。

@ sidm1983私は持っています。 このためのPRを提出してもよろしいですか?

これを修正する2.8.3をリリースしました。

新しいCraftプロジェクトのデフォルトのHTMLPurifier構成も更新しました。 config/htmlpurifier/Default.jsonファイルがある場合は、この変更を手動で行う必要があります: https

@ andris-sevcenko&@ brandonkellyに感謝します。 申し訳ありませんが、その時点でチャンスがなかったため、PRを提出しませんでした。 それを整理してくれてありがとう。

@brandonkelly 、上記のコミットで行った変更についての簡単な質問。 ドット文字がエスケープされていないように見えます。つまり、単一のドットだけでなく、任意の文字に一致します。 これは意図的なものですか?

@brandonkellyは、正規表現のドット文字のエスケープに関する上記の私のコメントを見たかどうかを確認したかっただけです。 ありがとうございました。 😊🙏🏽

このページは役に立ちましたか?
0 / 5 - 0 評価