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 に連絡してこの機能を実装してもらうことができます。

ただし、すぐに必要な場合は、元のクラスを実装する独自のクラスを作成し、必要なことを行うための数学を配置できます。そのため、考えられる例の 1 つは次のようになります。

<?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 に答える