根据字符串内容添加HTML个标签的函数

Function to add HTML tags depending on string content

我已经尝试创建一个函数来处理数据库中要使用自动格式发布的文本。

如果有\n:应该转换成<p>...</p>

如果有 - : 也应该加上列表标签

我的问题是我真的不知道如何添加 <ul></ul> 标签。

function nl2p($string){
  $string = explode("\n", $string);
  $paragraphs = '';
  foreach ($string as $line) {
    if (trim($line)) {
      if (substr($line,0,1) == '-'){
        $paragraphs .= '<li>' . substr($line,1) . '</li>'."\r\n";
      } else {
        $paragraphs .= '<p>' . $line . '</p>'."\r\n";
      }
    }
  }
return $paragraphs;
}

收集所有连续的 <li> 字符串中的文本元素,然后将 this 字符串括在 <ul></ul> 中。

使用变量(在我的示例中为$ul):

function nl2p($string){
  $string = explode("\n", $string);
  $paragraphs = '';
  $ul = 0;
  foreach ($string as $line) {
    if (trim($line)) {
      if (substr($line,0,1) == '-'){
        if($ul == 0){
            $paragraphs .= "<ul>\r\n";
            $ul = 1;
        }
        $paragraphs .= '<li>' . substr($line,1) . '</li>'."\r\n";
      } else {
        if($ul == 1){
            $paragraphs .= "</ul>\r\n";
            $ul = 0;
        }
        $paragraphs .= '<p>' . $line . '</p>'."\r\n";
      }
    }
  }
return $paragraphs;
}

我会搜索第一个字符是破折号,如果上一行不是以破折号开头,则在此处添加 <ul>。然后将该行包裹在 li 标签中,并在末尾进行相同的检查 - 如果下一行不是以破折号开头,则添加一个 </ul>.

然后,作为默认操作,将行换行到一个段落中。

$string = "this is a string.
New line 1.
New line 2.
- List item
- Another list item
Some more lines of text";

function nl2p($input) {
    $lines = explode("\r\n",$input);
    $return = '';
    foreach($lines as $key => $line) {
        if(strpos($line,'-') === 0) {
            if(array_key_exists($key-1,$lines) AND strpos($lines[$key-1],'-') === FALSE) {
                $return .= '<ul>' . "\r\n";
            }
            $return .= '<li>' . $line . '</li>' . "\r\n";
            if(array_key_exists($key+1,$lines) AND strpos($lines[$key+1],'-') !== 0) {
                $return .= '</ul>' . "\r\n";
            }
            continue;
        }
        $return .= '<p>' . $line . '</p>' . "\r\n";
    }
    return $return;
}
var_dump(nl2p($string));

/*
<p>this is a string.</p>
<p>New line 1.</p>
<p>New line 2.</p>
<ul>
<li>- List item</li>
<li>- Another list item</li>
</ul>
<p>Some more lines of text</p>

*/
function nl2p($input) {
    if(strpos($input, "\n")) {
        $slash = explode("\n",$input);
        $newPara = '';
        foreach($slash as $slashval) {
            $slashval = '@'.$slashval;
            if(strpos($slashval,"-")) {
                $slashval = substr($slashval, 1);
                $hypen = explode("-",$slashval);
                $newPara .= '<ul>';
                foreach($hypen as $hypenval) {
                    if(!empty($hypenval)) {
                        $newPara .= '<li>'.$hypenval.'</li>';
                    }
                }
                $newPara .= '</ul>';
            } else {
                $slashval = substr($slashval, 1);
                $newPara .= '<p>'.$slashval.'</p>';
            }
        }
        return $newPara;
    } else {
        $slashval = $input;
        if(strpos($slashval,"-")) {
            $hypen = explode("-",$slashval);
            $newPara .= '<ul>';
            foreach($hypen as $cnt => $hypenval) {
                if($cnt == 0) {
                    $start = $hypenval;
                } else {
                    if(!empty($hypenval)) {
                        $newPara .= '<li>'.$hypenval.'</li>';
                    }
                }
            }
            $newPara .= '</ul>';
            $newPara = $start.$newPara;
        } else {
            $slashval = '@'.$input;
            if(strpos($slashval,"-")) {
                $slashval = substr($slashval, 1);
                $hypen = explode("-",$slashval);
                $newPara .= '<ul>';
                foreach($hypen as $hypenval) {
                    if(!empty($hypenval)) {
                        $newPara .= '<li>'.$hypenval.'</li>';
                    }
                }
                $newPara .= '</ul>';
            }   
        }
        return $newPara;
    }
    return $input;
}