代码之家  ›  专栏  ›  技术社区  ›  Al.

将wiki格式转换为XHTML

  •  3
  • Al.  · 技术社区  · 16 年前

    我有一个存储“维基格式”文本的数据库,我想使用PHP以XHTML显示这些文本。

    Default text
    == Heading 1 ==
    === Heading 2 ===
    ==== Heading 3 ====
    ===== Heading 4 =====
    ====== Heading 5 ======
    '''Bold'''
    ''Italic''
    <s>Strikethrough</s>
    
    * List item 1
    * List item 2
    
    # Numbered item 1
    # Numbered item 2
    
    [[Image:http://domain.com/image.png|Image name]]
    
    [http://google.com Link text goes here]
    
    > Blockquote
    
    <source lang="language">Source code</source>
    

    提前感谢!

    5 回复  |  直到 16 年前
        1
  •  4
  •   troelskn    16 年前

    我想说,当今最标准的维基格式是 markdown including PHP .

        2
  •  3
  •   Gumbo    16 年前

    MediaWiki 是用PHP编写的,许可证在 GPL WikiText

        3
  •  2
  •   Dan Gøran Lunde    16 年前

    是的,这似乎是一种相当标准的维基格式。我使用PEAR包Text_wiki创建了几个PHP wiki解决方案。它只做你想做的事情,你甚至可以扩展它来支持任何自定义语法,并根据任何规则进行翻译。

    http://pear.php.net/package/Text_Wiki

        4
  •  2
  •   Al.    16 年前

    function wiki2html($text)
    {
            $text = preg_replace('/&lt;source lang=&quot;(.*?)&quot;&gt;(.*?)&lt;\/source&gt;/', '<pre lang="$1">$2</pre>', $text);
            $text = preg_replace('/======(.*?)======/', '<h5>$1</h5>', $text);
            $text = preg_replace('/=====(.*?)=====/', '<h4>$1</h4>', $text);
            $text = preg_replace('/====(.*?)====/', '<h3>$1</h3>', $text);
            $text = preg_replace('/===(.*?)===/', '<h2>$1</h2>', $text);
            $text = preg_replace('/==(.*?)==/', '<h1>$1</h1>', $text);
            $text = preg_replace("/'''(.*?)'''/", '<strong>$1</strong>', $text);
            $text = preg_replace("/''(.*?)''/", '<em>$1</em>', $text);
            $text = preg_replace('/&lt;s&gt;(.*?)&lt;\/s&gt;/', '<strike>$1</strike>', $text);
            $text = preg_replace('/\[\[Image:(.*?)\|(.*?)\]\]/', '<img src="$1" alt="$2" title="$2" />', $text);
            $text = preg_replace('/\[(.*?) (.*?)\]/', '<a href="$1" title="$2">$2</a>', $text);
            $text = preg_replace('/&gt;(.*?)\n/', '<blockquote>$1</blockquote>', $text);
    
            $text = preg_replace('/\* (.*?)\n/', '<ul><li>$1</li></ul>', $text);
            $text = preg_replace('/<\/ul><ul>/', '', $text);
    
            $text = preg_replace('/# (.*?)\n/', '<ol><li>$1</li></ol>', $text);
            $text = preg_replace('/<\/ol><ol>/', '', $text);
    
            $text = str_replace("\r\n\r\n", '</p><p>', $text);
            $text = str_replace("\r\n", '<br/>', $text);
            $text = '<p>'.$text.'</p>';
            return $text;
    }
    

    Default text
    == Heading 1 ==
    === Heading 2 ===
    ==== Heading 3 ====
    ===== Heading 4 =====
    ====== Heading 5 ======
    '''Bold'''
    ''Italic''
    <s>Strikethrough</s>
    
    * List item 1
    * List item 2
    
    # Numbered item 1
    # Numbered item 2
    
    [[Image:http://domain.com/image.png|Image name]]
    
    [http://google.com Link text goes here]
    
    > Blockquote
    
    <source lang="language">Source code</source>
    

    输出:

    <p>
      Default text<br/>
      <h1> Heading 1 </h1><br/>
      <h2> Heading 2 </h2><br/>
      <h3> Heading 3 </h3><br/>
      <h4> Heading 4 </h4><br/>
      <h5> Heading 5 </h5><br/>
      <strong>Bold</strong><br/>
      <em>Italic</em><br/>
      <strike>Strikethrough</strike>
    </p>
    
    <p>
      <ul>
        <li>List item 1</li>
        <li>List item 2</li>
      </ul>
      <br/>
      <ol>
        <li>Numbered item 1</li>
        <li>Numbered item 2</li>
      </ol>
      <br/>
      <img src="http://domain.com/image.png" alt="Image name" title="Image name" />
    </p>
    
    <p>
      <a href="http://google.com" title="Link text goes here">Link text goes here</a>
    </p>
    
    <p>
      <blockquote> Blockquote</blockquote><br/>
      <pre lang="language">Source code</pre><br/>
    </p>
    
        5
  •  -1
  •   Chris Sobolewski    16 年前

    这在很大程度上取决于你使用什么语言来解析。

    客户端使用Javascript?