将 Mysql 中的数据显示为有序列表

Show data from Mysql as ordered list

我有一个带有 textarea 字段的表单。用户在此列表中输入项目是这样的

 * first item in list
 * second item in list
Free text not in list

我希望在星号转换为项目符号列表时输出。没有星号的文本不在项目符号列表中。

赞:


自由文本不在列表中


尝试过:

$text = preg_replace("/\-+(.*)?/i","<li></li>",$input);
$output = preg_replace("/(\<\/ul\>(.*)\<ul\>*)+/","",$text);

但我正在努力了解 preg_replace(),并试图寻找更好的解决方案。 所以我发现这段代码不起作用。

看看 Parsedown,https://parsedown.org/。这正是您所需要的。

我写了一个小脚本来演示您是否不想使用正则表达式。

无论如何,听起来您想解析 markdown,并且有很多库可以解析它。这些库比自己动手做要可靠得多,因为有很多边缘情况。

<?php
$input = [];  // Assuming this is the list of lines to output.
$output = []; // Lines to output later.

$listOpen = false; // Whether we are currently in an <ul> list.

foreach ($input as $line) {
    // Check if string starts with a *, ignoring preceding whitespace.
    if (str_starts_with(ltrim($line), '*')) {
        // Open list if it is not open yet.
        if ($listOpen === false) {
            $output[] = "<ul>";
            $listOpen = true;
        }

        // Get text without preceding whitespace and *
        $text = ltrim(substr($line, strpos($list, '*')));

        // Output list item
        $output[] = "<li>$text</li>";

        // Continue to the next line and don't process code below.
        continue;
    }

    // Close list with </ul> if it has been opened before.
    if ($listOpen === true) {
        $output[] = "</ul>";
        $listOpen = false;
    }

    // Output line in paragraph tag.
    $output[] = "<p>$line</p>";
}

// Make sure the list is closed.
if ($listOpen === true) {
    $output[] = "</ul>";
    $listOpen = false;
}

// Output each line on a new line (actual newline \n or \r\n, not a HTML <br/>)
echo implode($output, PHP_EOL);

使用这个简单的方法:

$txt = " * first item in list";
$result = strpos($txt,"*");
//with *
if($result != false)
{
echo 'string replaced *  = '.str_replace("*","",$result);
}
$txt_1 = "first item in list";
$result_1 = strpos($txt_1,"*");
echo '<br>';
//without *
if($result_1 == false)
{
echo 'string without *';
}