2016-08-01 64 views
1

我正在使用Wordpress,并且正在尝试将所有段落转换为有序列表,并且它几乎完美地工作。 我的代码:将段落转换为无序列表

$list_items1 = explode("<p>", $bulletlist); 
    echo '<ul>'; 
     foreach($list_items1 as $list_item) 
     echo '<li>' . $list_item . '</li>'; 
    echo '</ul>'; 

唯一的问题是,它在每个列表的开始创建一个空的列表项,像这样:

<ul> 
    <li></li> 
    <li>List item 1</li> 
    <li>List item 2</li> 
    <li>List item 3</li> 
</ul> 

如何这个问题能解决?有没有其他解决方案来解决这个问题?提前致谢! PS:它也应该作为有序列表工作。

回答

1

似乎在wordpress中可能有空白的p标签。我会添加一个条件来捕获空p标签。

$list_items1 = explode("<p>", $bulletlist); 
echo '<ul>'; 
foreach($list_items1 as $list_item) { 
    if ($list_item != '') { 
     echo '<li>' . $list_item . '</li>'; 
    } 
} 
echo '</ul>'; 

您可能希望把条件更复杂抓空格,制表符,或者你不希望包括其他p标签的内容。

3

一种可能的解决方案是将p>的所有事件替换为li>

$list_items = str_replace('p>', 'li>', $bulletlist); 
echo '<ul>' . $list_items . '</ul>'; 

您的方法的问题是,explode('<p>', '<p>a</p><p>b</p><p>c</p>')结果在下面的数组中。

array(4) { 
    [0]=> string(0) "" 
    [1]=> string(5) "a</p>" 
    [2]=> string(5) "b</p>" 
    [3]=> string(5) "c</p>" 
} 

第一个元素为空,因为第一个<p>标记的左侧没有任何内容。正如其他人所建议的,有些方法可能会忽略第一个元素,但仍然需要处理残留的标记,这会使HTML变得混乱。

0

因此,根据您提供的内容,您可以使用一些“黑客”解决方案来解决此问题,但很难根据提供的内容给出明确的解决方案。如果这只是第一个项目发生的一切的时候,你可以简单地跳过循环的第一次迭代中,像这样:

$isFirstIteration = true; 
$list_items1 = explode("<p>", $bulletlist); 
echo '<ul>'; 
    foreach($list_items1 as $list_item) 
    if(!$isFirstIteration){ 
     echo '<li>' . $list_item . '</li>'; 
    }else{ 
     $isFirstIteration = false; 
     continue; 
    } 

echo '</ul>'; 

,你可以检查标签是空

$list_items1 = explode("<p>", $bulletlist); 
echo '<ul>'; 
    foreach($list_items1 as $list_item) 
    if(!empty($list_items1)){ 
     echo '<li>' . $list_item . '</li>'; 
    } 

echo '</ul>'; 

祝你好运。