3

有没有一种简单的方法可以从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;
4

1 回答 1

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*'));

希望这可以帮助你...</p>

于 2013-11-21T16:01:43.683 回答