Цитирование пользователей в форумах - PullRequest
0 голосов
/ 28 августа 2009

Я работаю над разделом комментариев для сайта, где пользователи могут цитировать то, что сказал другой пользователь. Это ваша основная кнопка "цитата" на форуме.

Использование 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>

Ответы [ 3 ]

2 голосов
/ 28 августа 2009

Попробуйте изменить его на что-то вроде:

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

Требуется немного больше модификаций, если вы хотите, чтобы люди могли цитировать без указания имени пользователя, например [quote] некоторый текст [/ quote].

1 голос
/ 28 августа 2009

Хорошо, одну вещь, которую я предлагаю, состоит в том, что вы хотите избежать нескольких проходов через ваш файл, и 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
}
0 голосов
/ 03 ноября 2009

Нет, Форум обычно использует следующий формат:

<div><strong>username</strong> said:</div>
<blockquote>
some sentence
</blockquote>
...