PHP中的简单Markdown子集功能

时间:2011-08-18 03:43:42

标签: php regex markdown

我想只允许段落和列表。

实际上我想使用输入以Open Document格式创建文档。所以我用ODF中的正确标记替换标记<p>。但首先,我正在尝试学习如何将降价格式转换为我可以使用的格式。

我可以使用MarkdownPHP的输出并将html中的标签替换为ODF标签,但是我只想使用段落和列表。 Markdown产生的远远超过我的需要。如果我错过任何html标记,ODF文档将会中断,因为它不了解html标记。

我相信可以使用简单的RegExp。但我不知道怎么做!

示例:

My first line.

*    My first item.
*    My second item.

More text...

输出:

<p>My first line.</p>
<ul>
    <li>My first item.</li>
    <li>My second item.</li>
</ul>
<p>More text...</p>

2 个答案:

答案 0 :(得分:1)

您可以使用strip_tags() function删除所需标记以外的所有标记。它们的内容将保留,但标签本身将被删除。

试试这个:

$output = strip_tags($output, "<p><ul><ol><li>");

从那里,你可以使用str_replace()将剩余的标签更改为他们的ODF对应物。 (如果Markdown解析器中的标记格式不一致,那么您可以使用preg_replace()来处理差异,具体取决于具体的输出。)

答案 1 :(得分:0)

根据 AgentConundrum 的答案,我可以解决问题。 但我需要运行解析器2次,因为在第一次之后我将没有包裹块。

$output = Markdown($output);
$output = strip_tags($output, '<p><ul><ol><li>');
$output = Markdown($output);
$output = strip_tags($output, '<p><ul><ol><li>');

示例:

This is an H1
=============

Paragraph here...

*    List item.

之后:

$output = Markdown($output);
$output = strip_tags($output, '<p><ul><ol><li>');
echo $output;

我会这样:(注意h1标题)

This is an H1

<p>Paragraph here...</p>

<ul>
    <li>List item.</li>
</ul>

所以,我再次解析输出:

<p>This is an H1</p>

<p>Paragraph here...</p>

<ul>
    <li>List item.</li>
</ul>