Así que solo estaba probando la configuración predeterminada de HTML Purifier que ahora permite incrustar videos de YouTube correctamente y no la elimina al guardar una entrada, sin embargo, todavía no funciona correctamente. Creo que esto se debe a que la expresión regular utilizada para determinar si la URL de iframe src es youtube o vimeo no es del todo correcta y no tiene en cuenta un caso de borde en las URL de youtube que omiten la parte https:
al principio de la URL.
Esto sucede porque cuando inserta por primera vez el video de YouTube, el HTML resultante se ve así:
<figure><iframe style="width: 500px; height: 281px;" src="//www.youtube.com/embed/roY6H75d9wE" frameborder="0" allowfullscreen=""></iframe></figure>
Como puede ver arriba, el parámetro src
comienza con //
, en lugar de https://
Como resultado, el src
se elimina porque la expresión regular actual que se está utilizando no tiene en cuenta la posibilidad de que falte un esquema:
https://github.com/craftcms/redactor/blob/2fff5171f89538e84921119e8af533e6379ad24b/src/Field.php#L1019
Aquí hay una expresión regular que he usado en el pasado que funciona con este caso de borde:
'URI.SafeIframeRegexp' => '%^(https?:)?//(www\.youtube(?:-nocookie)?\.com/embed/|player\.vimeo\.com/video/)%',
Tenga en cuenta los corchetes adicionales y el signo de interrogación alrededor de la parte https?:
marcan como opcional. También tiene en cuenta las URL de nocookie de YouTube. Por último, los caracteres .
(punto) también se han escapado ya que queremos que coincida con un punto real y no con cualquier carácter.
Además, creo que esos caracteres .
(punto) en la expresión regular deben escaparse correctamente, ya que la intención es hacer coincidir un carácter .
literal y no ningún carácter. He actualizado la solución de expresiones regulares anterior para escapar de ellos.
@ andris-sevcenko acaba de registrarse para ver si ha visto este problema. Gracias.
@ sidm1983 tengo. ¿Estás dispuesto a enviar un PR para esto?
Acabo de lanzar 2.8.3 que soluciona este problema.
También actualicé la configuración predeterminada de HTML Purifier para nuevos proyectos Craft. Deberá realizar este cambio manualmente si tiene un archivo config/htmlpurifier/Default.json
: https://github.com/craftcms/craft/commit/2e3710956cd6d8f8a1ac572a2b10c53e714f1799
Gracias por eso @ andris-sevcenko & @brandonkelly. Disculpas, no envié un PR para esto, ya que no tuve la oportunidad en ese momento. Sin embargo, gracias por solucionarlo.
@brandonkelly , pregunta rápida sobre el cambio que hiciste en la confirmación anterior. Parece que los caracteres de puntos no se están escapando, lo que significa que coincidirán con cualquier carácter y no solo con un punto. ¿Es esto intencional?
@brandonkelly solo quería verificar si ha visto mi comentario anterior sobre cómo escapar del carácter de punto en la expresión regular. Gracias. 😊🙏🏽