سؤال

يمكنني استخدام PECL bbcode امتداد لتحليل BBCode-العلامات.

أي شخص يمكن أن تظهر لي طريقة استبدال النص بين BBCode الكلمات بدلا من المحيطة مع HTML العلامات ؟ أريد بناء [youtube] العلامة:

[youtube]w0ffwDYo00Q[/youtube]

التهيئة لهذا الوسم يبدو مثل هذا:

$tags = array(
    'youtube' => array(
        'type'     => BBCODE_TYPE_NOARG,
        'open_tag' => 
            '<object width="425" height="350">
                 <param name="movie" value="http://www.youtube.com/v/{CONTENT}"></param>
                 <embed src="http://www.youtube.com/v/{CONTENT}" type="application/x-shockwave-flash" width="425" height="350"></embed>
             </object>',
        'close_tag' => '',
    ),
);

المشكلة:النص بين [youtube] فئة (Youtube ID) مطلوب مرتين (على موضوع تضمين العلامات) لذا لا يمكن استخدام close_tag على النحو المقصود.

النتيجة:العلامات إدراج يوتيوب لاعب يتم إنشاؤه بشكل صحيح ولكن بعد أن يوتيوب-معرف المطبوعة:

<object width="425" height="350">
    <param name="movie" value="http://www.youtube.com/v/w0ffwDYo00Q"></param>
    <embed src="http://www.youtube.com/v/w0ffwDYo00Q" type="application/x-shockwave-flash" width="425" height="350"></embed>
</object>w0ffwDYo00Q

أي شخص يعرف كيفية حل هذه المشكلة ؟

شكرا مقدما!

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

المحلول

أنا لا يمكن اختبار الآن, لذلك لست متأكدا من أنه يعمل...ولكن ربما يمكنك أن تجرب هذا :

وثائق bbcode_create يصف المفاتيح/القيم التي يمكنك استخدامها لتكوين العلامة الخاصة بك.
واحد من هذه المفاتيح هي :

content_handling اختياري - يعطي رد تستخدم لتعديل المحتوى.وجوه المنحى التدوين معتمدة فقط منذ 0.10.1 رد النموذج هو اسم سلسلة(string $المحتوى ، سلسلة $الحجة)

حتى ما إذا كنت تحديد تلك الممتلكات ، بحيث يكون رابط وظيفة تعديل المحتوى...تعديل كان بواسطة إعداد إلى سلسلة فارغة على سبيل المثال ؟

شيء من هذا القبيل ، ربما :

$tags = array(
    'youtube' => array(
        'type'     => BBCODE_TYPE_NOARG,
        'open_tag' => 
            '<object width="425" height="350">
                 <param name="movie" value="http://www.youtube.com/v/{CONTENT}"></param>
                 <embed src="http://www.youtube.com/v/{CONTENT}" type="application/x-shockwave-flash" width="425" height="350"></embed>
             </object>',
        'close_tag' => '',
        'content_handling' => 'remove_handler',
    ),
);

وإعلان remove_handler وظيفة هذه الطريقة :

function remove_handler($content, $argument) {
  return '';
}

أو ربما بهذه الطريقة :

function remove_handler(& $content, $argument) {
  $content = '';
}

مع القليل من الحظ, هذا قد يكون كافيا لإزالة المحتوى ؟


تحرير بعد تعليق عن الاقتراح السابق


مرحبا مرة أخرى ،

هذه المرة حاولت ما أقترحه, و يبدو أن العامل ;-)

أولا, يمكنك تعيين '' لكل من open_tag و close_tag ;هذا الطريق ، content_handling رد سوف تكون مسؤولة عن كل عمل.
شيئا من هذا القبيل, لذلك :

$tags = array(
    'youtube' => array(
        'type'     => BBCODE_TYPE_NOARG,
        'open_tag' => '',
        'close_tag' => '',
        'content_handling' => 'generate_youtube_tag',
    ),
);

وظيفة رد الاتصال ثم تبدو مثل هذا :

function generate_youtube_tag($content, $argument) {
    // TODO some security checks on $content !
    // Here, I've assumed that a youtube id only contains letters and numbers
    // But I don't know it that's always the case
    if (preg_match('/^[\d\w]+$/', $content)) {
        return <<<NEW_CONTENT
<object width="425" height="350">
    <param name="movie" value="http://www.youtube.com/v/{$content}"></param>
    <embed src="http://www.youtube.com/v/{$content}" type="application/x-shockwave-flash" width="425" height="350"></embed>
</object>
NEW_CONTENT;
    }
    else {
        return '';
    }
}

فإنه في الواقع يولد كله <object> الوسم ، بما في ذلك أحداثا من youtube id.

وإذا كنت اسميها مثل هذا :

$text = '[youtube]w0ffwDYo00Q[/youtube]';
$bbHandler = bbcode_create($tags);
$output = bbcode_parse($bbHandler, $text);
var_dump($output);

يمكنك الحصول على هذا الناتج :

string '<object width="425" height="350">
    <param name="movie" value="http://www.youtube.com/v/w0ffwDYo00Q"></param>
    <embed src="http://www.youtube.com/v/w0ffwDYo00Q" type="application/x-shockwave-flash" width="425" height="350"></embed>
</object>' (length=246)

الذي يبدو وكأنه شيء ينبغي أن تكون على ما يرام ;-)
في الواقع, إذا كنت فقط ouput ذلك :

echo $output;

الفيديو يتم تحميلها ، هذا يسمى سيمون القط 'القط الرجل لا', للمعلومية ;-)


نأمل أن يكون هذا يحل مشكلتك بشكل أفضل هذه المرة :-)

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