将 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 *';
}
我有一个带有 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 *';
}