7

改行を段落に変換したい。

例えば

$string = "1st paragraph

2nd paragraph


3rd paragraph 
";

私は手に入れたい、

<p>1st paragraph</p>
<p>2nd paragraph</p>
<p>3rd paragraph</p>

と、

$string = "1st paragraph

2nd paragraph
a line break

3rd paragraph 
";

の中へ、

<p>1st paragraph</p>
<p>2nd paragraph<br/>a line break</p>
<p>3rd paragraph</p>

regexとで可能reg_replaceですか?または他のより良いもの- xpath

私はこれを試しましたが、まだ結果はありません、

echo preg_replace("'/^(.*?)(<br\s*\/?>\s*)+/'", "<p>$1</p>", nl2br($string));
4

2 に答える 2

16

逆の方法で行うこともできます。最初に複数の改行を段落に置き換え、次に単一の改行を<br>要素に置き換えます。

$str = preg_replace('/\n(\s*\n)+/', '</p><p>', $str);
$str = preg_replace('/\n/', '<br>', $str);
$str = '<p>'.$str.'</p>';

また、最初に行末を正規化する必要があります(WindowsスタイルからUNIXスタイル)。

function normalize($str) {
    // Normalize line endings
    // Convert all line-endings to UNIX format
    $s = str_replace("\r\n", "\n", $str);
    $s = str_replace("\r", "\n", $s);
    // Don't allow out-of-control blank lines
    $s = preg_replace("/\n{2,}/", "\n\n", $s);
    return $s;
}
于 2013-02-07T22:48:09.917 に答える
4

さらに別の解決策:

$string = preg_replace('/\n{2,}/', "</p><p>", trim($string));
$string = preg_replace('/\n/', '<br>',$string);
$string = "<p>{$string}</p>";
于 2013-02-07T22:55:53.843 に答える