Redactor: Paramètre Youtube iframe 'src' supprimé après avoir enregistré une entrée

Créé le 13 oct. 2020  ·  7Commentaires  ·  Source: craftcms/redactor

La description

Je testais donc simplement la configuration par défaut de HTML Purifier qui permet désormais d'intégrer correctement des vidéos youtube et ne la supprime pas lors de l'enregistrement d'une entrée, mais elle ne fonctionne toujours pas correctement. Je pense que c'est parce que l'expression régulière utilisée pour déterminer si l'URL src iframe est youtube ou vimeo n'est pas tout à fait correcte et ne tient pas compte d'un cas limite dans les URL youtube qui omettent la partie https: au début de l'URL.

Étapes à reproduire

  1. Allez sur youtube et récupérez n'importe quelle URL de vidéo (par exemple https://www.youtube.com/watch?v=roY6H75d9wE)
  2. Utilisez l'icône d'intégration de vidéo dans le rédacteur pour ajouter la vidéo youtube ci-dessus à l'éditeur.
  3. Enregistrer l'entrée
  4. Revenez et modifiez la même entrée
  5. Vous verrez que la vignette de la vidéo youtube a disparu. Si vous regardez le code HTML dans l'éditeur, l'iframe lui-même est là, il manque juste le paramètre 'src'.

Solution

Cela se produit parce que lorsque vous intégrez la vidéo YouTube pour la première fois, le code HTML résultant ressemble à ceci :

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

Comme vous pouvez le voir ci-dessus, le paramètre src commence par // , au lieu de https://

En conséquence, la src ci-dessus est supprimée car l'expression régulière actuellement utilisée ne tient pas compte de la possibilité d'un schéma manquant :
https://github.com/craftcms/redactor/blob/2fff5171f89538e84921119e8af533e6379ad24b/src/Field.php#L1019

Voici un regex que j'ai utilisé dans le passé qui fonctionne avec ce cas de bord :

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

Veuillez noter les crochets supplémentaires et le point d'interrogation autour de la partie https?: marquant comme facultative. Il prend également en compte les URL nocookie de youtube. Enfin, les caractères . (point) ont également été échappés car nous voulons qu'ils correspondent à un point réel et pas à n'importe quel caractère.

information additionnelle

  • Version artisanale : 3.5.12.1
  • Version PHP : 7.3
  • Pilote et version de la base de données : pgsql 11
  • Plugins & versions : rédacteur 2.8.1
bug

Tous les 7 commentaires

De plus, je pense que ces caractères . (point) dans l'expression régulière doivent être correctement échappés car l'intention est de faire correspondre un caractère littéral . et non n'importe quel caractère. J'ai mis à jour la solution regex ci-dessus pour les échapper.

@andris-sevcenko vient de vérifier si vous avez vu ce problème. Merci.

@sidm1983 J'ai. Êtes-vous prêt à soumettre un PR pour cela ?

Je viens de publier la version 2.8.3 qui corrige cela.

Je viens de mettre à jour la configuration par défaut du purificateur HTML pour les nouveaux projets Craft. Vous devrez effectuer cette modification manuellement si vous avez un fichier config/htmlpurifier/Default.json : https://github.com/craftcms/craft/commit/2e3710956cd6d8f8a1ac572a2b10c53e714f1799

Merci pour ça @andris-sevcenko & @brandonkelly. Mes excuses, je n'ai pas soumis de RP pour cela, car je n'en ai pas eu l'occasion à l'époque. Merci d'avoir réglé ça quand même.

@brandonkelly , petite question sur le changement que vous avez effectué dans le commit ci-dessus. Il semble que les caractères de point ne soient pas échappés, ce qui signifie qu'ils correspondront à n'importe quel caractère et pas à un seul point. Est-ce intentionnel ?

@brandonkelly voulait juste vérifier si vous avez vu mon commentaire ci-dessus sur l'échappement du caractère point dans la regex. Merci. ??

Cette page vous a été utile?
0 / 5 - 0 notes