Redactor: تم إزالة معلمة "src" على Youtube iframe بعد حفظ الإدخال

تم إنشاؤها على ١٣ أكتوبر ٢٠٢٠  ·  7تعليقات  ·  مصدر: craftcms/redactor

وصف

لذلك كنت فقط أختبر تهيئة HTML Purifier الافتراضية التي تسمح الآن بتضمين مقاطع فيديو youtube بشكل صحيح ولا تجردها عند حفظ الإدخال ، لكنها لا تزال لا تعمل بشكل صحيح. أعتقد أن هذا يرجع إلى أن التعبير العادي المستخدم لتحديد ما إذا كان عنوان URL الخاص بـ iframe src هو youtube أو vimeo ليس صحيحًا تمامًا ولا يمثل حالة الحافة في عناوين url الخاصة بـ youtube التي تحذف الجزء https: في بداية عنوان URL.

خطوات التكاثر

  1. انتقل إلى youtube واحصل على أي عنوان URL للفيديو (على سبيل المثال https://www.youtube.com/watch؟v=roY6H75d9wE)
  2. استخدم أيقونة تضمين الفيديو في المحرر لإضافة فيديو youtube أعلاه إلى المحرر.
  3. احفظ الإدخال
  4. عد وقم بتحرير نفس الإدخال
  5. سترى أن الصورة المصغرة لفيديو youtube قد اختفت. إذا نظرت إلى HTML في المحرر ، ستجد أن iframe نفسه موجودًا ، فهو يفتقد فقط إلى المعلمة 'src'.

حل

يحدث هذا لأنه عند تضمين فيديو 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 الخاصة بملفات تعريف الارتباط الخاصة بـ youtube. أخيرًا ، تم أيضًا تخطي الأحرف . (نقطة) لأننا نريدها أن تتطابق مع نقطة فعلية وليس فقط أي حرف.

معلومات إضافية

  • الإصدار الحرفي: 3.5.12.1
  • إصدار PHP: 7.3
  • برنامج تشغيل وإصدار قاعدة البيانات: pgsql 11
  • الإضافات والإصدارات: redactor 2.8.1
bug

ال 7 كومينتر

أيضًا ، أعتقد أن هذه الأحرف . (نقطة) في التعبير العادي تحتاج إلى الهروب بشكل صحيح لأن القصد هو مطابقة حرف . وليس أي حرف. لقد قمت بتحديث حل regex أعلاه للهروب منها.

@ andris-sevcenko فقط يسجل الوصول لمعرفة ما إذا كنت قد رأيت هذه المشكلة. شكرا لك.

@ sidm1983 لدي. هل أنت على استعداد لتقديم PR لهذا الغرض؟

تم إصداره للتو 2.8.3 والذي يعمل على إصلاح هذا.

فقط قمت بتحديث التكوين الافتراضي لتنقية HTML للمشاريع الحرفية الجديدة أيضًا. ستحتاج إلى إجراء هذا التغيير يدويًا إذا كان لديك ملف config/htmlpurifier/Default.json : https://github.com/craftcms/craft/commit/2e3710956cd6d8f8a1ac572a2b10c53e714f1799

شكرا لذلك @ andris-sevcenko &brandonkelly. أعتذر عن عدم تقديم PR لهذا ، حيث لم تتح لي الفرصة في ذلك الوقت. شكرا لفرزها بالرغم من ذلك.

brandonkelly ، سؤال سريع حول التغيير الذي أجريته في الالتزام أعلاه. يبدو أنه لم يتم تخطي الأحرف النقطية ، مما يعني أنها ستطابق أي حرف وليس مجرد نقطة واحدة. هل هذا مقصود؟

brandonkelly أردت فقط التحقق مما إذا كنت قد رأيت تعليقي أعلاه حول الهروب من الحرف النقطي في regex. شكرا لك. 😊🙏🏽

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات