6

MySQL データベースから行 (段落) に分割されたテキストを取得しています。変数に格納されます$post_data['content']。改行して印刷するにはどうすればよいですか?

私が現在使用しているコード:

$post_data['content'] = explode("\n", $post_data['content']);
$post = "<p>" . implode("</p><p>", array_values($post_data['content'])) . "</p>";

これは私が望むほどには機能しません。

データベースに次のようなテキストがある場合:

line 1 paragraph 1,
line 2 paragraph 1.

line 3 paragraph 2,
line 4 paragraph 2,
line 5 paragraph 2.

コードは次のように表示されます (これは望ましくありません)。

<p>line 1 paragraph 1,</p>

<p>line 2 paragraph 1.</p>

<p>line 3 paragraph 2,</p>

<p>line 4 paragraph 2,</p>

<p>line 5 paragraph 2.</p>

行間に空白がない場合(改行が1つだけ)、段落をグループ化したいと思います。おそらく、爆発後の配列に何か?

4

4 に答える 4

17

まず、改行を次のように置き換えます<br />

$post = nl2br($post_data['content']);

次に double<br />を段落の終了タグと開始タグに置き換えます (元の改行は によって維持されるnl2brため、改行のすべてのスタイルに一致する正規表現を使用します)。

$post = '<p>' . preg_replace('#(<br />[\r\n]+){2}#', '</p><p>', $post) . '</p>';

これは XHTML 構文であることに注意してください。HTML が必要な場合は、次のようにコードを変更してください。

$post = nl2br($post_data['content'], false);
$post = '<p>' . preg_replace('#(<br>[\r\n]+){2}#', '</p><p>', $post) . '</p>';

テスト:

$post_data['content'] = <<<TXT
line 1 paragraph 1,
line 2 paragraph 1.

line 3 paragraph 2,
line 4 paragraph 2,
line 5 paragraph 2.
TXT;

$post = nl2br($post_data['content'], false);
$post = '<p>' . preg_replace('#(<br>[\r\n]+){2}#', "</p>\n\n<p>", $post) . '</p>';

echo $post;

テスト出力:

<p>line 1 paragraph 1,<br>
line 2 paragraph 1.</p>

<p>line 3 paragraph 2,<br>
line 4 paragraph 2,<br>
line 5 paragraph 2.</p>
于 2013-02-21T23:06:07.200 に答える
0

文字列を爆発させずに。

$post = "<p>" . nl2br($post_data['content']) . "</p>";
于 2013-02-21T22:49:31.097 に答える
0

あなたが試すことができます

$string = 'line 1 paragraph 1,
line 2 paragraph 1.

line 3 paragraph 2,
line 4 paragraph 2,
line 5 paragraph 2.';

echo implode("\n",array_map(function ($v) {
    return sprintf("<p>%s</p>", $v);
}, array_filter(explode("\n", $string))));
于 2013-02-21T22:55:05.973 に答える
0

段落と改行を使用する別の方法:

$post = '';
$paragraphs = explode("\n\n", $post_data['content']);
foreach ($paragraphs as $paragraph) {
    $post .= '<p>' . nl2br($paragraph) . '</p>';
}

これにより、次の結果が得られます。

段落 1 行 1
段落 1 行 2

段落 2 行 1

于 2013-02-21T22:56:50.480 に答える