使用PHPmarkdown进行内联降价

时间:2013-06-05 19:16:58

标签: php markdown

是否有一种简单的方法可以从PHP-markdown获得不必要的块级HTML输出?

Comment *text*应该产生Comment <em>text</em>而不是<p>Comment <em>text</em></p>

这样输出可以很容易地用在标签(在我的情况下)或评论中(比如在SO上)。

解析器没有这样的配置设置,但是我可能忽略了某些东西,或者有一个分叉。这似乎是一个相当简单,经常需要的功能。

当然,某些语法必须导致块级元素,但如果仅在必要/预期时才会发生这种情况。

目前我抓住了这样最不必要的转换:

$markdown = Markdown::defaultTransform($val);

if(substr_count($markdown,"</p>")===1 AND preg_match("@^<p>(.+)</p>$@",trim($markdown),$matches)):
    $val = $matches[1];
else:
    $val = $markdown;
endif;

1 个答案:

答案 0 :(得分:1)

我不知道任何好的快速代码,但您可以联系Michel Fortin来实现此功能。

但是,如果你想快点,你可以创建自己的类来实现原始的类,并设置一些方法来做你想要的,所以,一个可能的例子可能如下:

<?php
include('Michelf/Markdown.php');

use \Michelf\Markdown;


/**
 * Custom Markdown class 
 * 
 * This class has just one method yet, to do inline transform without some 
 * block HTML elements.
 */
class MyMarkdown extends Markdown
{

    /**
     * Does inline render, preventing use of `blockquote`, `p` and `hX` tags. 
     * 
     * @param string $str The Markdown string to transform
     * @static
     * @access public
     * @return string HTML string
     */
    public static function inlineTransform($str)
    {
        $htmlStr = trim(self::defaultTransform(trim($str)));
        $arrMatches = array();
        preg_match('@^<(h[1-6]{1}|p|blockquote)>(.+)</(h[1-6]|p|blockquote)>$@', $htmlStr, $arrMatches);

        if(isset($arrMatches[2]))
        {
            return $arrMatches[2];
        }

        return  $htmlStr;
    }
}


// some examples
var_dump(Markdown::defaultTransform('My *text*'));
var_dump(MyMarkdown::inlineTransform('My *text*'));
var_dump(Markdown::defaultTransform('## My *text*'));
var_dump(MyMarkdown::inlineTransform('## My *text*'));
var_dump(Markdown::defaultTransform('    My *text*'));
var_dump(MyMarkdown::inlineTransform('    My *text*'));

希望这可以帮助你...