0

改行を段落に変換するためのphp関数がありますが、h、ul、ol、またはliタグですでにラップされている行は無視します。文字列が次の場合を除いて、これは正常に機能します。

<h1>lkjhlkjkl</h1>
hgjk
<ul>
<li>hjgkghjk</li></ul>
ghjkghj

次のようにレンダリングします。

<h1>lkjhlkjkl</h1><p>hgjk</p><ul><li>hjgkghjk</li></ul><p>ghjkghj</p>

ただし、終了 ul タグが別の行にある場合、次の結果が表示されます。

<h1>lkjhlkjkl</h1><p>hgjk</p><ul><li>hjgkghjk</li><p></ul><p>ghjkghj</p>

閉じ ul の前に ap タグを配置する

これがphpです:

<?php
function format_html($content)
 {
  $content = preg_replace("/<(h[1-6]|ul|ol|li)>\n/", "<$1>", $content);
  $content = preg_replace("/<\/(h[1-6]|ul|ol|li)>\n/", "</$1><p>", $content);
  $content = "<p>" . str_replace("\n", "</p><p>", $content);
  $content = preg_replace("/<p><(h[1-6]|ul|ol|li)>/", "<$1>", $content);
  return $content;
 }

function format_html_end($content)
 {
  $content = preg_replace("/<\/(h[1-6]|ul|ol|li)><\/p>/", "</$1>", $content);
  return $content;
 }

 echo format_html_end(format_html("$content</p>"));

?>

この小さなバグを防ぐ方法はありますか?

4

1 に答える 1

2

これは、投稿したコード例で機能するはずです。ただし、リクエストした h、ul、ol、li だけでなく、すべてのタグに一致します。

$content = preg_replace("/\n([^<>]+)/", "<p>$1</p>", $content);
$content = str_replace("\n", "", $str);
echo $content;
于 2012-04-16T13:53:32.960 に答える