将换行符转换为<li>标记

Lui*_*uis 8 php textarea function line-breaks

我正在创建一个上传表单,其中包含一个文本区域供用户输入烹饪食谱.基本上,我想要做的是将每行包装在<li>标签中以用于输出目的.我一直试图操纵这个nl2br功能,但无济于事.有人可以帮忙吗?

我正在通过POST检索文本区域的内容并将条目存储在MySQL数据库中.这是代码目前的样子(check_input函数条斜线等):

$prepText=check_input($_POST['preparationText']);    
$cookText=check_input($_POST['cookingText']); 
Run Code Online (Sandbox Code Playgroud)

Pas*_*TIN 8

不太漂亮,但想到的想法是:

  • 使用换行符作为分隔符来爆炸字符串
  • 并使用</li><li>项之间的内容:

哪个可以翻译成这样的东西:

$new_string = '<li>' . implode('</li><li>', explode("\n", $old_string)) . '</li>';
Run Code Online (Sandbox Code Playgroud)

(是的,糟糕的主意 - 不要这样做,特别是如果文字很长)


另一种更清洁的解决方案是通过以下方式替换字符串中的换行符</li><li> :(
将结果字符串包装在内部,<li>然后</li>打开/关闭它们)

$new_string = '<li>' . str_replace("\n", '</li><li>', $old_string) . '</li>';
Run Code Online (Sandbox Code Playgroud)

有了这个想法,例如,以下部分代码:

$old_string = <<<STR
this is
an example
of a 
string
STR;

$new_string = '<li>' . str_replace("\n", '</li><li>', $old_string) . '</li>';
var_dump($new_string);
Run Code Online (Sandbox Code Playgroud)

会得到这种输出:

string '<li>this is</li><li>an example</li><li>of a </li><li>string</li>' (length=64)
Run Code Online (Sandbox Code Playgroud)


Ric*_*ing 8

\n然后分解字符串,然后将每行包装在li标记中.

<?php
$string = "line 1\nline 2\nline3";

$bits = explode("\n", $string);

$newstring = "<ol>";
foreach($bits as $bit)
{
  $newstring .= "<li>" . $bit . "</li>";
}
$newstring .= "</ol>";
Run Code Online (Sandbox Code Playgroud)