2011-08-18 51 views
0

我想只允許段落和列表。PHP中的簡單Markdown子集功能

其實我想用輸入來創建一個文檔打開文檔格式。所以我用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> 

回答

1

可以使用strip_tags() function刪除不是你想要的那些以外的所有標籤。他們的內容將保留,但標籤本身將被刪除。

試試這個:

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

從那裏,你可以使用str_replace()改變剩餘標記插入他們的ODF同行。 (如果Markdown解析器中的標記格式不一致,則可以使用preg_replace()來根據具體輸出處理差異)。

+0

謝謝你的出發點!!! –

+0

@達尼洛不客氣。如果這解決了您的問題,請點擊此答案上的複選標記以接受它。 :) – AgentConundrum

0

基於從代理難題的答案,我可以解決這個問題。 但我需要運行解析器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>