簡體   English   中英

php函數中的錯誤,用段落標記替換換行符

[英]Bug in php function to replace line breaks with paragraph tags

我有一個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>"));

?>

任何想法如何防止這個小錯誤?

這應該適用於您發布的代碼示例。 但是,它匹配所有標簽,而不僅僅是您請求的h,ul,ol和li。

$content = preg_replace("/\n([^<>]+)/", "<p>$1</p>", $content);
$content = str_replace("\n", "", $str);
echo $content;

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM