【问题标题】:Unordered list in Php/HTMLPHP/HTML 中的无序列表
【发布时间】:2015-05-01 23:19:59
【问题描述】:

我正在尝试使字符串中的星号表示无序列表中的列表元素。

    $first_char = substr($p,0,1);
    if($first_char == '*'){
        $p = '<ul>' . $p . '</li></ul>';
        $p = str_replace('*' , '<li>',$p);
        $p = str_replace('\n' , '</li>',$p);
    }

但是,如果这样做的话,就不能将星号用作列表元素中的内容。有什么办法可以改变吗?

【问题讨论】:

  • 也许您可以使用字符组合来表示列表项。不确定这与您的情况有多相关,但请查看 Markdown。这是一个很好的文本到 HTML 转换器。
  • 您可以做的一件事是将您的 php 组合起来(像上面那样创建列表项),然后使用 css 中的 content 属性将 li 节点转换为星号。我在下面写的并不是对您直接问题的真正答案,因此我将其删除。如果你想研究这个,这里有一些有用的信息:stackoverflow.com/a/12216973/3044080

标签: php html list unordered


【解决方案1】:

正则表达式替换解决方案

<?php

$pattern = '/(?:^|\n)\s*\*[\t ]*([^\n\r]+)/';
$replacement = '<li>${1}</li>';
$count = 0;

$p = preg_replace($pattern, $replacement, $p, -1, $count);

if ($count > 0) {
    $pattern = '/(<li>.*?(?:<\/li>)(?:\s*<li>.*?(?:<\/li>))*)/';
    $replacement = '<ul>${1}</ul>';

    $p = preg_replace($pattern, $replacement, $p);
}
?>

测试字符串

* Lorem ipsum dolor sit amet, * consec*tetur adipiscing elit
    *Curabitur ullamcorper neque sit amet

 *  Pellente*sque nec quam rhoncus
Suspendisse ut lacinia arcu

* Nullam in vulpu*tate tellus

输出

<ul><li>Lorem ipsum dolor sit amet, * consec*tetur adipiscing elit</li>
<li>Curabitur ullamcorper neque sit amet</li>
<li>Pellentesque nec quam rhoncus</li></ul>
Suspendisse ut lacinia arcu
<ul><li>Nullam in vulputate tellus</li></ul>

PHP Manual - preg_replace

【讨论】:

    【解决方案2】:

    这可能不是最好的解决方案,但您始终不能在字符串 ($p) 中使用 *。相反,将每个星号写为其等效的 HTML 代码,在本例中为 &amp;#42;。在浏览器中显示时,用户会看到漂亮的星号,但 str_replace 不应该看到它。或者你可以引入一些转义字符,但这可能会有点复杂。

    【讨论】:

      【解决方案3】:

      这是简单的方法:

      if(substr($p,0,1) == '*'){
          $p = '<ul>' . substr($p,1) . '</ul>;
      }
      

      【讨论】:

        猜你喜欢
        • 2013-05-04
        • 1970-01-01
        • 2022-01-14
        • 1970-01-01
        • 1970-01-01
        • 2018-10-25
        • 2020-02-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多