簡體   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