代码之家  ›  专栏  ›  技术社区  ›  sqram

在论坛中引用用户

  •  0
  • sqram  · 技术社区  · 15 年前

    我正在为一个网站的评论部分工作,用户可以引用另一个用户说的话。这是你在论坛上的基本“报价”按钮。

    使用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;
    }
    

    简而言之,论坛引用通常是怎么做的……这是正确的方式吗?如果是的话,我怎么能转换

    [引号=用户名]一些句子[引号]
    

    进入之内

    <blockquote>用户名说:
    一些句子
    </blockquote>
    
    3 回复  |  直到 15 年前
        1
  •  2
  •   Jason Berry    15 年前

    尝试将其更改为:

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

    如果你想允许人们在不指定用户名的情况下引用,比如[quote]some text[/quote],则需要再做一些修改。

        2
  •  1
  •   cletus    15 年前

    好吧,我建议您避免在文件中多次传递,而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
    }
    
        3
  •  0
  •   Lastnico    15 年前

    不,论坛通常使用以下格式:

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