Redactor: Youtube iframe 'src' Parameter nach dem Speichern eines Eintrags entfernt

Erstellt am 13. Okt. 2020  ·  7Kommentare  ·  Quelle: craftcms/redactor

Beschreibung

Ich habe also gerade die Standard-HTML-Purifier-Konfiguration getestet, die jetzt das korrekte Einbetten von YouTube-Videos ermöglicht und sie beim Speichern eines Eintrags nicht entfernt, aber sie funktioniert immer noch nicht richtig. Ich glaube, das liegt daran, dass die Regex, die verwendet wird, um zu bestimmen, ob die iframe-src-URL entweder youtube oder vimeo ist, nicht ganz richtig ist und keinen Randfall in YouTube-URLs berücksichtigt, die den https: Teil zu Beginn weglassen die URL.

Schritte zum Reproduzieren

  1. Gehen Sie zu YouTube und rufen Sie eine beliebige Video-URL auf (z. B. https://www.youtube.com/watch?v=roY6H75d9wE)
  2. Verwenden Sie das Video-Einbettungssymbol in Redactor, um das obige YouTube-Video zum Editor hinzuzufügen.
  3. Eintrag speichern
  4. Komm zurück und bearbeite den gleichen Eintrag
  5. Sie werden sehen, dass die Miniaturansicht des YouTube-Videos verschwunden ist. Wenn Sie sich den HTML-Code im Editor ansehen, ist der iframe selbst da, es fehlt nur der Parameter 'src'.

Lösung

Dies liegt daran, dass der resultierende HTML-Code beim ersten Einbetten des YouTube-Videos so aussieht:

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

Wie Sie oben sehen können, beginnt der Parameter src mit // anstelle von https://

Infolgedessen wird der obige src Wert entfernt, da die aktuell verwendete Regex die Möglichkeit eines fehlenden Schemas nicht berücksichtigt:
https://github.com/craftcms/redactor/blob/2fff5171f89538e84921119e8af533e6379ad24b/src/Field.php#L1019

Hier ist eine Regex, die ich in der Vergangenheit verwendet habe und die mit diesem Randfall funktioniert:

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

Bitte beachten Sie die zusätzlichen Klammern und das Fragezeichen um den Teil https?: , der es als optional kennzeichnet. Es berücksichtigt auch die Nocookie-URLs von YouTube. Schließlich wurden auch die Zeichen . (Punkt) mit Escapezeichen versehen, da wir möchten, dass sie einem tatsächlichen Punkt und nicht nur einem beliebigen Zeichen entsprechen.

zusätzliche Information

  • Handwerksversion: 3.5.12.1
  • PHP-Version: 7.3
  • Datenbanktreiber & Version: pgsql 11
  • Plugins & Versionen: redactor 2.8.1
bug

Alle 7 Kommentare

Außerdem denke ich, dass diese . (Punkt)-Zeichen in der Regex richtig maskiert werden müssen, da die Absicht darin besteht, ein wörtliches . Zeichen und nicht irgendein Zeichen zu finden. Ich habe die obige Regex-Lösung aktualisiert, um ihnen zu entkommen.

@andris-sevcenko checken Sie gerade ein, um zu sehen, ob Sie dieses Problem gesehen haben. Dankeschön.

@sidm1983 habe ich. Sind Sie bereit, dafür eine PR einzureichen?

Gerade 2.8.3 veröffentlicht, die dies behebt.

Habe gerade auch die Standard-HTML-Purifier-Konfiguration für neue Craft-Projekte aktualisiert. Sie müssen diese Änderung manuell vornehmen, wenn Sie eine config/htmlpurifier/Default.json Datei haben: https://github.com/craftcms/craft/commit/2e3710956cd6d8f8a1ac572a2b10c53e714f1799

Danke dafür @andris-sevcenko & @brandonkelly. Entschuldigung, dass ich dafür keine PR eingereicht habe, da ich damals keine Chance hatte. Danke aber fürs Aussortieren.

@brandonkelly ,

@brandonkelly wollte nur überprüfen, ob Sie meinen obigen Kommentar zum Entkommen des Punktzeichens in der Regex gesehen haben. Dankeschön. 😊🙏🏽

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen