【问题标题】:Converting nested html to bbCode tags将嵌套的 html 转换为 bbCode 标签
【发布时间】:2013-09-05 18:59:23
【问题描述】:

我正在尝试转换以下html

<div id="collapseOne" class="accordion-body collapse">
<div class="accordion-inner">
        My Header1
</div></div>

<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseOne">
        My content1
</a></div>

到下面这样的bbCode

[header]我的 Header1[header/]

[内容]我的内容1[内容/]

[header]我的 Header2[header/]

[content]我的 content2[content/] 。 . .

我该怎么做? 我正在写这门课但不工作

class BBCode
{
   private $Tags = array(
      'content','header');

   /**
    * Replaces all the BBCodes to HTML Codes
    * param string $text: the text with BBCodes
    */
   function ReplaceTag($Text)
   {
       $Replace_code['content'] = "<div id=\"collapseOne\" class=\"accordion-body collapse in\"><div class=\"accordion-inner\">$1</div></div>" ;
       $Replace_code['header'] = "<div class=\"accordion-heading\"><a class=\"accordion-toggle\" data-toggle=\"collapse\" data-parent=\"#accordion2\" href=\"#collapseOne\">$1</a></div>" ;

      // Deleting spaces from begging and end of string
      $Done = trim($Text);

      // Deleting all html code
      $Done = htmlspecialchars($Done);
      if(in_array("content",$this->Tags))
         $Done = preg_replace("/\[content\](.*?)\[\/content\]/is", $Replace_code['content'], $Done);

      if(in_array("header",$this->Tags))
           $Done = preg_replace("(\[header\](.*?)\[\/header\])is", $Replace_code['header'], $Done);

        $Done = nl2br($Done);
    enter code here
        return $Done;
   }

}

问题是 collapseOne 对每对标签都进行更改

【问题讨论】:

    标签: php html bbcode


    【解决方案1】:
    function Acco_Tag($Text)
    {
        $Text = preg_replace_callback('#\[header\](.*?)\[/header\]#muis','iNext4header', $Text);
        return preg_replace_callback('#\[content\](.*?)\[/content\]#muis', 'iNext4content', $Text);
    }
    private function iNext4header($match)
    {
        static $i=0;
        return '<div class="accordion-heading"><a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapse'.(++$i).'">'.$match[1].'</a></div>';
    }
    private function iNext4content($match)
    {
        static $i=0;
        return '<div id="collapse'.(++$i).'" class="accordion-body collapse in"><div class="accordion-inner">'.$match[1].'</div></div>';
    }
    

    谢谢

    我找到了答案

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-04
      相关资源
      最近更新 更多