将换行符转换为<li>标签</li>

时间:2011-03-23 12:19:57

标签: php function textarea line-breaks

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

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

$prepText=check_input($_POST['preparationText']);    
$cookText=check_input($_POST['cookingText']); 

5 个答案:

答案 0 :(得分:8)

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

  • 使用换行符作为分隔符
  • 爆炸字符串
  • 并在项目之间使用</li><li>内爆数组:

可以翻译成这样的东西:

$new_string = '<li>' . implode('</li><li>', explode("\n", $old_string)) . '</li>';

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


另一种更清洁的解决方案是替换字符串中的换行符</li><li>
(将结果字符串包装在<li></li>中,以打开/关闭这些字符串)

$new_string = '<li>' . str_replace("\n", '</li><li>', $old_string) . '</li>';

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

$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);

会得到这种输出:

string '<li>this is</li><li>an example</li><li>of a </li><li>string</li>' (length=64)

答案 1 :(得分:7)

\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>";

答案 2 :(得分:2)

我根据理查德的答案创建了一个函数,以防它节省任何时间!

/**
 * @param string $str - String containing line breaks
 * @param string $tag - ul or ol
 * @param string $class - classes to add if required
 */
function nl2list($str, $tag = 'ul', $class = '')
{
    $bits = explode("\n", $str);

    $class_string = $class ? ' class="' . $class . '"' : false;

    $newstring = '<' . $tag . $class_string . '>';

    foreach ($bits as $bit) {
        $newstring .= "<li>" . $bit . "</li>";
    }

    return $newstring . '</' . $tag . '>';
}

答案 3 :(得分:1)

function nl2li($str)
{
    if (!isset($str)) return false;
    $arr = explode("\r\n", $str);
    $li  = array_map(function($s){ return '<li>'.$s.'</li>'; }, $arr);
    return '<ul>'.implode($li).'</ul>';
}

输入:

Line 1\r\nLine2\r\nLine3\r\n

输出:

<ul><li>Line 1</li><li>Line 2</li><li>Line 3</li></ul>

答案 4 :(得分:0)

最简单的方法:

function ln2ul($string) {
  return '<ul><li>' . str_replace("\n", '</li><li>', trim($string)) . '</li></ul>';
}