Преобразование формата вики в XHTML - PullRequest
3 голосов
/ 10 августа 2009

У меня есть база данных, в которой хранится текст в вики-формате, который я хотел бы отобразить в XHTML с использованием PHP.

Вот пример выходных данных со всей разметкой вики:

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>

Это довольно стандартный синтаксис вики? Есть ли достаточно стандартный способ интерпретации его с помощью PHP?

Заранее спасибо!

Ответы [ 5 ]

4 голосов
/ 10 августа 2009

Я бы сказал, что самый стандартный вики-формат сегодня - это уценка . Существуют библиотеки, доступные практически для любой платформы, , включая PHP .

3 голосов
/ 10 августа 2009

MediaWiki написан на PHP и лицензирован по GPL . Таким образом, вы можете просто взять конвертер WikiText и использовать его.

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

Я придумал хак, но он ломается во многих вещах. Это лучший путь вперед?

PHP:

<code>function wiki2html($text)
{
        $text = preg_replace('/&lt;source lang=&quot;(.*?)&quot;&gt;(.*?)&lt;\/source&gt;/', '<pre lang="$1">$2
', $ text); $ text = preg_replace ('/======(.*?)======/', '
$ 1
', $ text); $ text = preg_replace ('/=====(.*?)=====/', '

$ 1

', $ text); $ text = preg_replace ('/====(.*?)====/', '

$ 1

', $ text); $ text = preg_replace ('/===(.*?)===/', '

$ 1

', $ text); $ text = preg_replace ('/==(.*?)==/', '

$ 1

', $ text); $ text = preg_replace ("/'''(.*?)'''/", ' $ 1 ', $ text); $ text = preg_replace ("/''(.*?)''/", ' $ 1 ', $ text); $ text = preg_replace ('/ & lt; s & gt; (. *?) & lt; \ / s & gt; /', ' $ 1 ', $ text); $ text = preg_replace ('/ \ [\ [Image: (. *?) \ | (. *?) \] \] /', '$2', $text); $text = preg_replace('/\[(.*?) (.*?)\]/', ' $ 2 ', $ text); $ text = preg_replace ('/ & gt; (. *?) \ n /', '
$ 1
', $ text); $ text = preg_replace ('/ \ * (. *?) \ n /', '
  • $ 1
', $ text); $ text = preg_replace ('/ <\ / ul>
  • $ 1
2 голосов
/ 10 августа 2009

Да, это похоже на довольно стандартный формат вики. Я создал несколько PHP-вики-решений, используя пакет PEAR Text_Wiki. Он делает то, что вы хотите, и вы даже можете расширить его для поддержки любого пользовательского синтаксиса и переводить в соответствии с любым правилом.

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

0 голосов
/ 10 августа 2009

Это будет сильно зависеть от того, какой язык вы используете для разбора.

Клиентская часть с Javascript?

Серверная часть с ASP или PHP?

...