Новая строка к функции абзаца

У меня есть эта интересная функция, которую я использую для создания новых строк в абзацы. Я использую его вместо функции NL2BR () , как Выводит лучший отформатированный текст.

function nl2p($string, $line_breaks = true, $xml = true) {

$string = str_replace(array('<p>', '</p>', '<br>', '<br />'), '', $string);

// It is conceivable that people might still want single line-breaks
// without breaking into a new paragraph.
if ($line_breaks == true)
    return '<p>'.preg_replace(array("/([\n]{2,})/i", "/([^>])\n([^<])/i"), array("</p>\n<p>", '<br'.($xml == true ? ' /' : '').'>'), trim($string)).'</p>';
else 
    return '<p>'.preg_replace(
    array("/([\n]{2,})/i", "/([\r\n]{3,})/i","/([^>])\n([^<])/i"),
    array("</p>\n<p>", "</p>\n<p>", '<br'.($xml == true ? ' /' : '').'>'),

    trim($string)).'</p>'; 

}

Проблема в том, что всякий раз, когда я пытаюсь создать один разрыв строки, он непреднамеренно удаляет первый символ абзаца под ним. Я недостаточно знакомого с Regex, чтобы понять, что вызывает проблему.

27
задан yivi 18 July 2019 в 09:19
поделиться

1 ответ

Вот подход, который идет с обратным методом, чтобы заменить абзацы на обычные разрывы строк и наоборот.

Это полезно использовать при построении ввода формы. При сохранении пользовательского ввода может потребоваться преобразовать разрывы строк в теги абзаца, однако при редактировании текста в форме вы можете не захотеть, чтобы пользователь видел какие-либо HTML-символы. Затем мы заменили бы абзацы на разрывы строк.

// This function will convert newlines to HTML paragraphs
// without paying attention to HTML tags. Feed it a raw string and it will
// simply return that string sectioned into HTML paragraphs
function nl2p($str) {
    $arr=explode("\n",$str);
    $out='';

    for($i=0;$i<count($arr);$i++) {
        if(strlen(trim($arr[$i]))>0)
            $out.='<p>'.trim($arr[$i]).'</p>';
    }
    return $out;
}

// Return paragraph tags back to line breaks
function p2nl($str)
{
    $str = preg_replace("/<p[^>]*?>/", "", $str);
    $str = str_replace("</p>", "\r\n", $str);
    return $str;
}
1
ответ дан 28 November 2019 в 04:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: