BBCode لXHTML: احتمالان، التعابير المنطقية واحد؟
سؤال
وأنا أكتب وحدة نمطية بلوق الصغيرة. أريد المستخدمين لتكون قادرة على كتابة كود BB. ولست بحاجة إلى تحويل هذا إلى XHTML لتخزين في DB، الذي نجح علي أن أفعل لمعظم العلامات، باستثناء [url]
.
وهناك نوعان من الحالات أريد للسماح:
[url=http://stackoverflow.com/]
والتي ينبغي تحويلها إلى
<a href="http://www.stackoverflow.com">http://www.stackoverflow.com</a>
و
[url=http://stackoverflow.com/]StackOverflow[/url]
والتي ينبغي تحويلها إلى
<a href="http://www.stackoverflow.com" title="StackOverflow">StackOverflow</a>
للأسف، لقد كنت غير قادر على القيام بذلك. النتائج حيث الرهيبة، وأنا أتساءل عما إذا كان هذا يمكن أن يتم في التعابير المنطقية واحد أو إذا كان لابد من تقسيم في البلدين.
المحلول
وهذا يجب أن تعمل:
\[url\s*=\s*([^\]]*)]\s*((?:(?!\s*\[/url\]).)*)\s*\[/url\]|\[url\s*=\s*([^\]]*)]
ونمط استبدال:
<a href="$1$3" title="$2">$2$3</a>
واختبار مع هذه المدخلات:
bla [url=http://stackoverflow.com/]StackOverflow[/url] bla
bla [url=http://stackoverflow.com/] bla
وإرجاع:
bla <a href="http://stackoverflow.com/" title="StackOverflow">StackOverflow</a> bla
bla <a href="http://stackoverflow.com/" title="">http://stackoverflow.com/</a> bla
لاحظ أنه في أي حال قد تضطر إلى إضافة بعض التحقق من صحة / الهروب، وشخصيات XML كما غير صالحة ( "، <،> الخ) قد" كسر "العلامة المحتويات.
نصائح أخرى
وشيء من هذا القبيل قطعة مروع العمل ينبغي أن نفعل ذلك:
\[url=([^\]]+)\](?:([^\[]+)\[\/url\])?
وعند مطابقة، وهذا ينبغي وضع رابط في $ 1 و النص في 2 $ إذا كان قد تم تحديد ذلك. لم أكن اختبار هذه بعد ذلك قد يتطلب بعض التغيير والتبديل.
واناليزي وظيفة BBCode2HTML ($ نص)
والخوارزمية لتحويل ال BBCode 2 HTML هي: 1) تنظيم النص ال BBCode الرمز هنا: https://code.google.com/p /pwision/source/browse/trunk/inc/BBCode.inc#60
2) تحويل ال BBCode المنظم إلى XML الرمز هنا: https://code.google.com/p /pwision/source/browse/trunk/inc/BBCode.inc#101
و3) تشغيل تحول XSLT على النص XML. ملف XSLT هنا https://code.google.com/p/pwision /source/browse/trunk/inc/BBCodeXML2HTML.xslt يتم التحول هنا: https://code.google.com/p /pwision/source/browse/trunk/inc/BBCode.inc#113
والأمل لقد ساعدت!
وPS: أ XSLT جيد تعليمي أن تجد هنا: http://www.w3schools.com/xsl/xsl_languages.asp