Redactor: Parameter 'src' iframe Youtube dihapus setelah menyimpan entri

Dibuat pada 13 Okt 2020  ·  7Komentar  ·  Sumber: craftcms/redactor

Keterangan

Jadi saya baru saja menguji konfigurasi HTML Purifier default yang sekarang memungkinkan penyematan video youtube dengan benar dan tidak menghapusnya saat menyimpan entri, namun masih tidak berfungsi dengan benar. Saya yakin ini karena regex yang digunakan untuk menentukan apakah iframe src URL youtube atau vimeo kurang tepat dan tidak memperhitungkan kasus tepi di url youtube yang menghilangkan bagian https: di awal URL-nya.

Langkah-langkah untuk mereproduksi

  1. Buka youtube dan ambil URL video apa saja (mis. https://www.youtube.com/watch?v=roY6H75d9wE)
  2. Gunakan ikon embed video di redactor untuk menambahkan video youtube di atas ke editor.
  3. Simpan entri
  4. Kembali dan edit entri yang sama
  5. Anda akan melihat bahwa thumbnail video youtube telah menghilang. Jika Anda melihat HTML di editor, iframe itu sendiri ada di sana, hanya parameter 'src' yang hilang.

Larutan

Hal ini terjadi karena saat pertama kali menyematkan video youtube, HTML yang dihasilkan terlihat seperti ini:

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

Seperti yang Anda lihat di atas, parameter src dimulai dengan // , bukan https://

Akibatnya, nilai src atas dihapus karena regex saat ini yang digunakan tidak memperhitungkan kemungkinan skema yang hilang:
https://github.com/craftcms/redactor/blob/2fff5171f89538e84921119e8af533e6379ad24b/src/Field.php#L1019

Berikut adalah regex yang saya gunakan di masa lalu yang berfungsi dengan case Edge ini:

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

Harap perhatikan tanda kurung dan tanda tanya tambahan di sekitar bagian https?: menandainya sebagai opsional. Itu juga memperhitungkan URL nocookie youtube. Terakhir, karakter . (titik) juga telah diloloskan karena kami ingin agar cocok dengan titik yang sebenarnya dan bukan sembarang karakter.

informasi tambahan

  • Versi kerajinan: 3.5.12.1
  • Versi PHP: 7.3
  • Driver basis data & versi: pgsql 11
  • Plugin & versi: redactor 2.8.1
bug

Semua 7 komentar

Juga, saya pikir karakter . (titik) dalam regex perlu diloloskan dengan benar karena tujuannya adalah untuk mencocokkan karakter . literal dan bukan karakter apa pun. Saya telah memperbarui solusi regex di atas untuk menghindarinya.

@andris-sevcenko hanya memeriksa untuk melihat apakah Anda telah melihat masalah ini. Terima kasih.

@sidm1983 saya punya. Apakah Anda bersedia menyerahkan PR untuk ini?

Baru saja merilis 2.8.3 yang memperbaiki ini.

Baru saja memperbarui konfigurasi HTML Purifier default untuk proyek Craft baru juga. Anda perlu melakukan perubahan ini secara manual jika Anda memiliki file config/htmlpurifier/Default.json : https://github.com/craftcms/craft/commit/2e3710956cd6d8f8a1ac572a2b10c53e714f1799

Terima kasih untuk itu @andris-sevcenko & @brandonkelly. Maaf saya tidak mengirimkan PR untuk ini, karena saya tidak mendapatkan kesempatan pada saat itu. Terima kasih telah menyortirnya.

@brandonkelly , pertanyaan singkat tentang perubahan yang Anda buat pada komit di atas. Sepertinya karakter titik tidak diloloskan, yang berarti mereka akan cocok dengan karakter apa pun dan bukan hanya satu titik. Apakah ini disengaja?

@brandonkelly hanya ingin memeriksa apakah Anda telah melihat komentar saya di atas tentang keluar dari karakter titik di regex. Terima kasih. 😊🙏🏽

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

lukeyouell picture lukeyouell  ·  26Komentar

cstudios-slovakia picture cstudios-slovakia  ·  6Komentar

stenvdb picture stenvdb  ·  16Komentar

sandissauka picture sandissauka  ·  16Komentar

davist11 picture davist11  ·  13Komentar