سؤال

أنا أعمل على قسم التعليقات لموقع ، حيث يمكن للمستخدمين اقتباس شيء قاله مستخدم آخر. هذا هو زر "اقتباس" الأساسي الخاص بك في المنتدى.

باستخدام BBCode لهذا الغرض. ولكن لست متأكدًا من كيفية تحقيق النتيجة.

كيف تتم هذه الميزة عادة؟

يمكنني الحصول على

[quote=username] some sentence [/quote]

التي سيتم تحويلها بشكل مثالي إلى

<blockquote>username said:
some sentence
</blockquote>

اعتبارا من الآن ، لدي رمز يتحول

"[quote=username] ... [/quote]"
 into
 <blockquote> ... </blockquote>

لكني أفقد اسم المستخدم

هذا هو الرمز الذي أستخدمه

// output user comment
echo parse_quote( $row['user_comment'] );


// and this is the function to parse the quote

function parse_quote($str) {
    $str = preg_replace("/\[quote=[\w\s\-\W][^\]]{1,}\]/", "<blockquote>:", $str);  
    $str = preg_replace("/\[\/quote\]/", "</blockquote>", $str);
    return $str;
}

لذلك باختصار ، كيف يتم نقل المنتديات عادة ... هل هي الطريقة الصحيحة؟ إذا كان الأمر كذلك ، كيف يمكنني التحويل

[quote=username] some sentence [/quote]

داخل

<blockquote>username said:
some sentence
</blockquote>
هل كانت مفيدة؟

المحلول

حاول تغييره إلى شيء مثل:

function parse_quote($str) {
    $str = preg_replace("/\[quote=([^\]]+)\]/", "<blockquote>$1 said:", $str);  
    $str = preg_replace("/\[\/quote\]/", "</blockquote>", $str);
    return $str;
}

ستكون هناك حاجة إلى مزيد من التعديل إذا كنت ترغب في السماح للأشخاص بالاقتباس دون تحديد اسم مستخدم ، مثل [QUOTE] بعض النص [/QUOTE].

نصائح أخرى

حسنًا ، هناك شيء واحد أقترحه هو أنك تريد تجنب تمريرات متعددة من خلال ملفك وأن PHP يوفر طريقة مريحة إلى حد ما للقيام بذلك باستخدام preg_replace_callback():

function process_codes($str) {
  return preg_replace_callback('!\[(.+?)\]!', 'process_code', $str);
}

function process_code($matches) {
  if ($matches[1] == '/quote') {
    return '</blockquote>';
  } else if (preg_match('!quote\s*=\s*(.+?)!', $matches[1], $args)) {
    return "<blockquote>$args[1] said:<br><br>";
  }
  // etc
}

لا ، يستخدم المنتدى بشكل عام التنسيق التالي:

<div><strong>username</strong> said:</div>
<blockquote>
some sentence
</blockquote>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top