Итак, я просто тестировал конфигурацию очистителя HTML по умолчанию, которая теперь позволяет правильно встраивать видео YouTube и не удаляет ее при сохранении записи, однако она все еще не работает должным образом. Я считаю, что это связано с тем, что регулярное выражение, используемое для определения того, является ли URL-адрес iframe src YouTube или vimeo, не совсем правильное и не учитывает крайний случай в URL-адресах YouTube, в которых опускается часть https:
в начале 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?:
обозначающие ее как необязательную. Он также учитывает URL-адреса nocookie на YouTube. Наконец, символы .
(точка) также были экранированы, поскольку мы хотим, чтобы они соответствовали реальной точке, а не только любому символу.
Кроме того, я думаю, что эти символы .
(точка) в регулярном выражении должны быть экранированы должным образом, поскольку цель состоит в том, чтобы сопоставить буквальный символ .
а не какой-либо символ. Я обновил решение с регулярным выражением выше, чтобы избежать их.
@ andris-sevcenko просто проверяет, не замечали ли вы эту проблему. Спасибо.
@ sidm1983 У меня есть. Вы готовы предоставить для этого PR?
Только что выпустила 2.8.3, в которой это исправлено.
Просто обновил конфигурацию очистителя HTML по умолчанию для новых проектов Craft. Вам нужно будет внести это изменение вручную, если у вас есть файл config/htmlpurifier/Default.json
: https://github.com/craftcms/craft/commit/2e3710956cd6d8f8a1ac572a2b10c53e714f1799
Спасибо за это @ andris-sevcenko & @brandonkelly. Извините, я не отправил PR по этому поводу, так как в то время у меня не было шанса. Спасибо, что разобрались.
@brandonkelly , быстрый вопрос об изменении, которое вы внесли в вышеуказанный коммит. Похоже, что символы точки не экранируются, что означает, что они будут соответствовать любому символу, а не только одной точке. Это намеренно?
@brandonkelly просто хотел проверить, видели ли вы мой комментарий выше об экранировании символа точки в регулярном выражении. Спасибо. 😊🙏🏽