هل يوجد محلل رمز BB صلب لـ PHP بدون تبعيات؟ [مغلق

StackOverflow https://stackoverflow.com/questions/1799454

  •  22-09-2019
  •  | 
  •  

سؤال

لدي موقف يستخدم فيه العميل PHP4 ولا يبدو أن لديهم الكمثرى. هل يوجد محلل مندوب BBCode PHP الذي سيعمل مع نظام BBCode الخاص بـ Vbulletin؟

أنا فقط بحاجة إلى تحويل BBCode إلى HTML. هذا هو ترحيل البيانات من Vbulletin إلى منصة جديدة ، لذلك لا يمكنني استخدام محلل BBCode من Vbulletin.

مستندات:

http://www.vbulletin.com/forum/misc.php؟do=bbcode

هل كانت مفيدة؟

المحلول

إليك واحدة على Hotscripts.com.

تحديث للرد على النقد (تم إدخاله بعد ثلاث سنوات من قبول هذه الإجابة) ، لا يحتوي هذا على محتوى كافٍ مباشرة في المنشور.

اسم البرنامج النصي هو حاليًا "تجنيد المحلل (BBCode إلى HTML)".

تم تحديث الرابط اعتبارًا من 11 فبراير 2013.

إلى مقاومة الرابط في المستقبل ، في حالة كسره مرة أخرى ، أقترح استخدام Google مع مصطلح البحث BBCode إلى HTML PHP, ، كما فعلت في الوقت الذي أجبت فيه هذا السؤال من أجلك. أو يمكنك زيارة Hotscripts لتجربة مهارات البحث في بيئة أكثر استهدافًا.

نصائح أخرى

'صلب'؟ لم أجد أبدًا محللًا من رمز بي بي بي على الإطلاق. يبدو أن جميعها عبارة عن مجموعة فضفاضة من regexen المتهور ، من السهل أن تخدع للسماح لهجمات حقن HTML.

على سبيل المثال ، يمكن بوضوح استغلال John W الذي نشره مع العديد من العلامات بما في ذلك:

[img]xxx" onerror="alert('JS injection!')[/img]

بالإضافة إلى أنه يسمح javascript: وعناوين URL الأخرى الخطرة ، تفشل في الفرار &, ، لا يسمح بالعديد من شخصيات عنوان URL (بما في ذلك %!) في حين أن السماح للآخرين عن طريق الخطأ لا ينبغي (لم يكن المؤلف يفهم تمامًا ما الذي يفعله الإحصار المتخلف في السلسلة هناك) وفشل في عدم السماح بعلامات أو علامات تم امتصاصها عن طريق الخطأ في سمات العلامات الأخرى ... إنها فوضى غير آمنة ، وهذا أمر مساوٍ للدورة مع محلات BBCode.

آسف للإجابة غير المفيدة (كان أكبر من أن تتناسب مع تعليق).

eta re comment: حسنًا ، إنها ليست بالضبط وحدة BBCode ، مماثلة تمامًا. لقد قمت بتقسيم الخطوط ، وإزالة أحرف التحكم الموجودة ، ثم استخدمت البايت 01 كبديل ل &, ، 02 ل < و 03 ل >, ، ثم لكل خطوة التحول المستخدمة re.split على (\x02[^\x03]*\x03) وقام بتشغيل إعادة الاستبدال في كل جزء ثاني (غير موجه) ، بدءًا من بدائل "الأعمق" مثل عمليات التغذية والعواطف ، ثم العمل في الخارج على الرغم من الصور بالروابط والارتياح المائل/الجريء ، وإدراجها \x02html tags\x03 كما يذهب. ثم أخيرًا HTML-ENCODE &<> واستبدل رموز التحكم بـ &<>. هذا يتوقف عن الحصول على وضع علامة على نفسه ، وهو مصدر كبير لنقاط الضعف في علامة التبسيطية القائمة على Regex.

تعال إلى التفكير في الأمر ، لقد كتبت أيضًا محللًا فعليًا لـ Python BBCode ، ولكن فقط كاختراق توافق سريع ؛ لا يقدم كل قدرات BBCode الكاملة. على وجه الخصوص ، لم يتم إسماعه بتعشير أي علامة (أي علامة مع علامة قريبة) داخل أي علامة أخرى. هذا سهل التنفيذ نسبيًا إذا كان ذلك مقبولًا ، حيث يمكنك استخدام إعادة تمرير أحادي التمرير لمطابقة أي علامة والحصول على وظيفة استبدال تقرر كيفية استبدالها بناءً على اسم العلامة. على سبيل المثال:

\[ (i|b|color|url|somethingelse) \=? ([^]]+)? \] (?: ([^]]*) \[\/\1\] )

(هذا ال VERBOSE Regex حتى المساحة البيضاء مخصصة فقط للقراءة. بقدر ما يمكن قراءة أي regex.)

إزالة التعشيش يبسط بشكل كبير عدد حالات الزاوية.

لا تتطلب هذه المكتبة الكمثرى ولديها بعض الحيل لمنع الحقن.

http://www.christian-seiler.de/projekte/php/bbcode/index_en.html

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top