繁体   English   中英

试图在PHP WYSIWYG中模仿Markdown的blockquote功能

[英]Trying to imitate Markdown's blockquote functionality in a PHP WYSIWYG

我正在从头开始构建一个WYSIWYG作为学术练习,我遇到了障碍。 我正在尝试使用一些基本的Markdown方法构建WYSIWYG,比如使用粗体/斜体的星号,标题的标记等等。但是,我遇到了blockquotes的问题。 这是我目前用来处理blockquotes输入的代码:

$content = '$_POST['content'];
while (preg_match('^>\s(.*)$', $content)) {
    $content    =   preg_replace('^>\s(.*)$', '<blockquote>$1</blockquote>', $content);
};

基本上它会查找以“大于”符号开头的任何行,提取文本并将其放在blockquote标记中,如下所示:

input:
> this is a blockquote.

output:
<blockquote>this is a blockquote.</blockquote>

这很好,但Markdown也可以采用多线程块引用并将其转换为单个块引用。 例如:

input:
> this is a blockquote that
> i decided to separate across
> several lines.

output:
<blockquote>this is a blockquote that i decided to separate across several lines.</blockquote>

我想模仿这个功能,但是使用我目前的代码,我最终会得到这个:

output:
<blockquote>this is a blockquote that</blockquote><blockquote>i decided to separate across</blockquote><blockquote>several lines.</blockquote>

我只是不确定如何正确连接blockquotes。 我想到的一种方法是改变每一行,然后对它们进行新的搜索</blockquote><blockquote> ,它们之间没有双重换行符,但这似乎效率低下。 代码将变为:

$content = '$_POST['content'];
while (preg_match('^>\s(.*)$', $content)) {
    $matched = true;
    $content = preg_replace('^>\s(.*)$', '<blockquote>$1</blockquote>', $content);
};
if ($matched) {
    $content = preg_replace('</blockquote>(\n|\r)?<blockquote>', '', $content);
};

我想这会起作用,但我觉得有一种更好的方法可以利用正则表达式来预测并抓住所有额外的线条。 不幸的是,我对这将是什么一无所知。

<p>替换为您想要的任何标记:)

<?php

$text = '
line one
line 2
> blockquote blockquote blockquote blockquote blockquote
> blockquote blockquote blockquote blockquote blockquote
> blockquote blockquote blockquote.
line 3

> AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
> AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
> AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

any
';
function blockquota($matches){
 $mytext = str_replace(array("> ", ">"), '' , $matches[0]);
 $mytext = '<p>'.$mytext.'</p>';
 return $mytext;
}
$pattern = '/(>)([^\v]+)(\v*((>)([^\v]+)))*/';
echo htmlspecialchars(preg_replace_callback($pattern, 'blockquota', $text));
?>

OUTPUT:

line one
line 2
<p>blockquote blockquote blockquote blockquote blockquote
blockquote blockquote blockquote blockquote blockquote
blockquote blockquote blockquote.</p>
line 3

<p>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</p>

any

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM