是否有一种简单的方法可以从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;
答案 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*'));
希望这可以帮助你...